博客班級 | https://edu.cnblogs.com/campus/fzzcxy/Freshman |
---|---|
作業要求 | https://edu.cnblogs.com/campus/fzzcxy/Freshman/homework/11734 |
作業目標 | <學習庫的用法及爬取影評的方法,並養成提交代碼的習慣> |
作業源代碼 | https://github.com/Subakuin/WinterVacationHomework |
學號 | <212011153> |
詞雲圖
一、說明
以python作為代碼語言,爬取豆瓣 《唐人街探案3》 的所有短評信息,用 jieba 進行分詞並通過 stylecloud 生成詞雲。
二、具體流程:
1.分析網頁
- 打開唐人街探案3的豆瓣影評

- 查看源代碼

- 發現短評存放在
<span>
標簽中,所以需要爬取其里邊的內容。
且通過翻頁可以看到 url 僅改變 start ,每次翻頁增加20,故可采用 for 循環語句控制頁數


2.獲取網頁內容
- 通過
bs4
以及requests
模塊進行獲取
這里需要安裝我們所要用到的庫
requests
bs4
stylecloud
jieba
(后面進行中文分詞時需要用到)進入cmd命令行,輸入
pip install ***
進行第三方庫的安裝(***為庫名稱)
- 由於我在直接安裝時速度很慢,且經常容易出現無法連接的情況,所以在這里推薦清華鏡像源安裝較快
pip install *** -i https://pypi.tuna.tsinghua.edu.cn/simple
同樣 *** 為庫名稱,后面網址為清華鏡像源,也可切換其他的鏡像源
3.導入庫並編寫語言
這是最終修改完成之后的代碼
# 分析豆瓣唐探3的影評,生成詞雲
import requests
from stylecloud import gen_stylecloud
import jieba
import re
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0'
}
def jieba_cloud(file_name):
with open(file_name, 'r', encoding='utf8') as f:
word_list = jieba.cut(f.read(),cut_all=True)
result = " ".join(word_list)
# 制作中文詞雲
icon_name = " "
icon = "ciyun"
pic = icon + '.png'
gen_stylecloud(text=result, font_path='simsun.ttc', output_name=pic)
return pic
def spider_comment(movie_id, page):
comment_list = []
with open("douban.txt", "a+", encoding='utf-8') as f:
for i in range(1,page+1):
url = 'https://movie.douban.com/subject/%s/comments?start=%s&limit=20&sort=new_score&status=P' \
% (movie_id, (i - 1) * 20)
req = requests.get(url, headers=headers)
req.encoding = 'utf-8'
comments = re.findall('<span class="short">(.*)</span>', req.text)
f.writelines('\n'.join(comments))
print(comments)
if __name__ == '__main__':
movie_id = '27619748' #引號中的數字即為電影短評網址中的那幾個數字,可以通過修改它來爬取其他電影的短評
page = 10
spider_comment(movie_id, page)
jieba_cloud("douban.txt")
這是運行出來的詞圖
4.對代碼進行創新優化

第一次commit
切換jieba分詞全模式為精確模式
輸出詞雲圖片
第二次commit
添加詞圖顯示的新形狀,設計代碼結構
def jieba_cloud(file_name, icon):
with open(file_name, 'r', encoding='utf8') as f:
word_list = jieba.cut(f.read())
result = " ".join(word_list)
icon_name = " "
if icon == "1":
icon_name = ''
elif icon == "2":
icon_name = "fas fa-dragon"
pic = str(icon) + '.png'
if icon_name is not None and len(icon_name) > 0:
gen_stylecloud(text=result, icon_name=icon_name, font_path='simsun.ttc', output_name=pic)
else:
gen_stylecloud(text=result, font_path='simsun.ttc', output_name=pic)
return pic
# 主函數
if __name__ == '__main__':
movie_id = '27619748'
page = 10
spider_comment(movie_id, page)
jieba_cloud("douban.txt", "1")
jieba_cloud("douban.txt", "2")
輸出詞雲圖片
第三次commit
添加代碼將詞圖以6種形式展現出來
輸出詞雲圖片
最終修改完的代碼已放入github倉庫 點此查看
- 遠程倉庫截圖如下

代碼行數 | 需求分析時間 | 編碼時間 |
---|---|---|
57 | 30min | n hours |
分解需求的思路
- 首先確定編程語言,再明確自己編寫代碼過程中所需要用到的庫,配置好python的環境。接着進入學習、編寫、修改並
簡化代碼的過程,划分代碼結構層次,一層層進行編寫並試運行,清楚自己期望的目的輸出結果。在此過程中也要不斷的提交
保留自己的歷史代碼,形成良好的習慣。這樣可以保證在編寫過程中不會分不清主次,更容易糾錯修改,結構也會更加清晰明
了,后期便於進行代碼的縮短優化,使其發揮出更好的性能。
在此次作業中遇到的問題
- 由於並未深入學習python語言,導致看到作業后的一臉茫然,之前也只是單單聽說過python實現爬蟲這個概念,卻從未
實踐過。於是完成此次作業花費的時間也就很多,並且遇到了不少的問題。不過我覺得最難受的就是網絡問題,在配置python
庫的時候速度很慢,會經常性的連接失敗,自己英文學的也不是太好,報錯有時候也不是太理解它所描述的原因,后來切換了
好幾個鏡像源,總算是完成了第一步的環境配置。然后便是編寫代碼、參考別人例子的過程,一次次代碼的運行失敗,一次次
的學習改正錯誤,麻煩確實麻煩,卻也無法比擬成功后的喜悅。同時在提交代碼到遠程倉庫時也一直失敗,網頁訪問GitHub也
一直被牆,然后就想着用國內的gitee,不過為了盡量按作業要求來,於是又掛了代理訪問github。雖然經歷了不少的麻煩,
但卻也學到了不少的東西。尤其是requests和jieba這兩個庫的使用,對python爬蟲實戰也有了更深入的了解和學習。不過整體
占比最重要的還是代碼git的提交,開始自己也懶得去一遍遍的commit,卻在代碼報錯修改和完善的過程中吃到了不少的苦頭,
直到快完成時才想到了git,習慣之后才感受到了它的便捷。后面的兩個作業我也會盡量嘗試着去做,經歷了開頭的難點,我想
完成后面的作業應該不會太難。不過問題總是在實踐中才出現,嘛,誰知道呢
參考鏈接資料及網站
總結
- 從來沒有花費這么長的時間去學習並且實踐,markdown的編寫確實也很費時間,不過的確是自己不熟悉markdown的結果。
學習中經歷的錯誤變成了自己獨到的理解和經驗,我也感受到了成功的喜悅。然而同時也讓我深刻的感受到,自己所學的不過只
是滄海一粟,在我們的生活場景中用到的軟件甚至系統底層又是多么龐大的工程啊,不知不覺便感慨人類社會的發展如此之快,
而僅僅用了兩周時間便寫出了git以及GitHub這樣如此好用的系統級網站的那個人又是何等的怪物啊!我也想要成為那樣的怪物,
然而這卻是一個難以實現的目標,但卻可以激勵着我一點點的去學習和追趕。而目前最應該做的便是學好一門C語言到精通,多余
的話不說,少說多做是根本,希望開學后的我可以散發着別樣的光芒!令人難以置信到不可理喻