點擊上方“藍字”,感謝關注!
這段時間,《哪吒》爆火。
于是,就想看看,關于《哪吒》的評價。
為什么選擇豆瓣?
質量和口碑還不錯吧。
可是,折騰一波之后,發現了這個。
豆瓣從2017.10月開始全面禁止爬取數據,僅僅開放500條數據,白天1分鐘最多可以爬取40次,晚上一分鐘可爬取60次數,超過此次數則會封禁IP地址。
登錄狀態下,按網頁按鈕點擊“后頁”,參數“start”最多為480,也就是20*25=500條;非登錄狀態下,最多為200條。
行吧,500條就500條吧,Let's go。
整個過程分為兩部分:
1 獲取豆瓣短評數據
2 詞云可視化
1 獲取短評數據
1)爬蟲原理簡單分析
2)需求分析
好了,爬蟲的基本思路我們已經了解了。
現在,開始干活了。
首先,我們打開短評的url地址:
https://movie.douban.com/subject/26794435/comments?status=P
我們想要獲取以下內容:
-用戶名稱
-評分
-短評內容
3)URL解析
要想獲取數據,我們先來分析一下URL。
4)發送請求,獲取響應
根據url,我們可以發送請求了,注意攜帶cookie。
先來爬一頁,看看結果。
import?requestsheaders?=?{'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/76.0".3809.100?Safari/537.36','Cookie':?'你的cookie'}for?i?in?range(0,?1):url?=?'https://movie.douban.com/subject/26794435/comments?start={}&limit=20&sort=new_s'?\'core&status=P'.format(i*10)reponse?=?requests.get(url,?headers=headers)print(reponse.content.decode())
5)定位信息
從圖中,我們可以看到對應的標簽和屬性。
利用xpath,我們可以很輕松地定位到我們想要的信息。推薦《6節課學會python爬蟲》,里邊講解得很好。
先定位到,每一頁的“20個短評”對應的xml位置。
再遍歷,每一個短評內容。
結合代碼來看一下。
item_list?=?[]html?=?etree.HTML(reponse.content.decode())
div_list?=?html.xpath('//*[@id="comments"]//div[@class="comment"]')#?定位大塊
for?div?in?div_list:#?遍歷每一條信息item?=?{}#?./?注意從當前節點,向下獲取 # 用戶姓名/用戶主頁的url/短評內容/評分 item['user_name']?=?div.xpath('.//span[@class="comment-info"]/a/text()')[0]item['user_url']?=?div.xpath('.//span[@class="comment-info"]/a/@href')[0]item['content']?=?div.xpath('.//span[@class="short"]/text()')[0].replace('\n',?'') item['score']?=?div.xpath('.//span[@class="comment-info"]/span/@title')[0]item_list.append(item)print(item)
5)保存結果
上邊,已經把每一條數據,整理成一個字典。然后,把字典放在一個大的列表里。
這樣,我們可以很輕松的把數據導出為csv文件。
#?把數據存成csv文件import?pandas?as?pd
df?=?pd.DataFrame(item_list)#?保證不亂碼
df.to_csv('哪吒短評數據.csv',?encoding='utf_8_sig')
2 詞云可視化
1)jieba分詞
參考博客:
https://blog.csdn.net/dnxbjyj/article/details/72854460? ?
結巴分詞 是針對字符串進行處理的,分詞后 會返回一個列表或者迭代器,你需要用 字符串的join方法,把詞語列表 重新拼接成一個字符串,然后把內容給到 wordcloud 生成詞云。
import?pandas?as?pd
import?jieba#?讀取數據
df?=?pd.read_csv('哪吒短評數據.csv',?encoding='utf-8-sig')text?=?''
#?獲得wordcloud?需要的?文本格式
for?line?in?df['content']:text?+=?'?'.join(jieba.cut(str(line),?cut_all=False))??#?結巴分詞
2)詞云展示
創建一個詞云對象,添加一些基本設置。比如,中文字體,背景圖片,停用詞等等。然后,根據上文中的 text,生成詞云。
我們可以看一下,文本中最高頻的50個詞。并把詞云保存為本地圖片。
from?wordcloud?import?WordCloud
import?matplotlib.pyplot?as?plt#?停用詞
words?=?pd.read_csv('stopwords_zh.txt',?error_bad_lines=False,?encoding='gbk',?engine?='python',?names=['stopword'])stopwords?=?set('')
stopwords.update(words['stopword'])backgroud_Image?=?plt.imread('豆瓣.jpg')??#?背景圖#?詞云的一些參數設置
wc?=?WordCloud(background_color='white',mask=backgroud_Image,font_path='SourceHanSerifCN-Medium.otf',max_words=200,max_font_size=200,min_font_size=8,random_state=50,stopwords=stopwords)#?print(text)#?生成詞云
word_cloud?=?wc.generate_from_text(text)#?看看詞頻高的有哪些
process_word?=?WordCloud.process_text(wc,?text)
sort?=?sorted(process_word.items(),?key=lambda?e:?e[1],?reverse=True)
print(sort[:50])plt.imshow(word_cloud)
plt.axis('off')wc.to_file('結果.jpg')
print('生成詞云成功!')
看一下高頻詞的結果。?
[('哪吒',?24),?('電影',?9),?('這部',?8),?('故事',?8),?
('動畫',?6),?('國產?動畫',?6),?('不由',?5),?('國漫',?5),?
('想象力',?5),?('國產',?5),?('人物',?5),?('我命',?4),?('一部',?4),?
('中國',?4),?('觀眾',?4),?('更是',?4),?('角色',?3),?('成見',?3),('笑料',?3),?('暑期',?3),?('不錯',?3),?('有人',?3),?('神話',?3),?
('形式',?3),?('良心',?3),?('熱血',?3),?('動畫電影',?3),?('成熟',?3),?
('優秀',?3),?('白蛇',?3),?('喜劇',?3),?('改編',?3),?('內核',?3),?
('最佳',?3),?('飽滿',?3),?('作品',?3),?('高潮',?3),?('場面',?3),
('大圣?歸來',?3),?('缺陷',?2),?('本片',?2),?('打破',?2),?
('偏見',?2),?('政治',?2),?('正確',?2),?('妖怪',?2),?
('爛片',?2),?('社稷',?2),?('震撼',?2),?('封神',?2)]
看一下詞云。
總結來了
我把文章中的一些重要的內容,總結在了下面的一張圖里,方便大家保存、查閱。
我把源文件及相關數據都打包好了,后臺回復【哪吒】,一鍵提取。
這個小例子,挺基礎的,適合入門的同學,但知識點也挺多的。
推薦閱讀:(點擊下方標題即可跳轉)沒看完這11 條,別說你精通 Python 裝飾器
張飛比關羽還能打?一位酷愛三國的日本程序員,用NLP分析了武將們的戰斗力??歡迎長按圖片識別二維碼關注~
總結
以上是生活随笔為你收集整理的爬取《哪吒》豆瓣短评,我得到了什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。