點(diǎn)擊上方“藍(lán)字”,感謝關(guān)注!
這段時(shí)間,《哪吒》爆火。
于是,就想看看,關(guān)于《哪吒》的評(píng)價(jià)。
為什么選擇豆瓣?
質(zhì)量和口碑還不錯(cuò)吧。
可是,折騰一波之后,發(fā)現(xiàn)了這個(gè)。
豆瓣從2017.10月開始全面禁止爬取數(shù)據(jù),僅僅開放500條數(shù)據(jù),白天1分鐘最多可以爬取40次,晚上一分鐘可爬取60次數(shù),超過此次數(shù)則會(huì)封禁IP地址。
登錄狀態(tài)下,按網(wǎng)頁按鈕點(diǎn)擊“后頁”,參數(shù)“start”最多為480,也就是20*25=500條;非登錄狀態(tài)下,最多為200條。
行吧,500條就500條吧,Let's go。
整個(gè)過程分為兩部分:
1 獲取豆瓣短評(píng)數(shù)據(jù)
2 詞云可視化
1 獲取短評(píng)數(shù)據(jù)
1)爬蟲原理簡(jiǎn)單分析
2)需求分析
好了,爬蟲的基本思路我們已經(jīng)了解了。
現(xiàn)在,開始干活了。
首先,我們打開短評(píng)的url地址:
https://movie.douban.com/subject/26794435/comments?status=P
我們想要獲取以下內(nèi)容:
-用戶名稱
-評(píng)分
-短評(píng)內(nèi)容
3)URL解析
要想獲取數(shù)據(jù),我們先來分析一下URL。
4)發(fā)送請(qǐng)求,獲取響應(yīng)
根據(jù)url,我們可以發(fā)送請(qǐng)求了,注意攜帶cookie。
先來爬一頁,看看結(jié)果。
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)定位信息
從圖中,我們可以看到對(duì)應(yīng)的標(biāo)簽和屬性。
利用xpath,我們可以很輕松地定位到我們想要的信息。推薦《6節(jié)課學(xué)會(huì)python爬蟲》,里邊講解得很好。
先定位到,每一頁的“20個(gè)短評(píng)”對(duì)應(yīng)的xml位置。
再遍歷,每一個(gè)短評(píng)內(nèi)容。
結(jié)合代碼來看一下。
item_list?=?[]html?=?etree.HTML(reponse.content.decode())
div_list?=?html.xpath('//*[@id="comments"]//div[@class="comment"]')#?定位大塊
for?div?in?div_list:#?遍歷每一條信息item?=?{}#?./?注意從當(dāng)前節(jié)點(diǎn),向下獲取 # 用戶姓名/用戶主頁的url/短評(píng)內(nèi)容/評(píng)分 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)保存結(jié)果
上邊,已經(jīng)把每一條數(shù)據(jù),整理成一個(gè)字典。然后,把字典放在一個(gè)大的列表里。
這樣,我們可以很輕松的把數(shù)據(jù)導(dǎo)出為csv文件。
#?把數(shù)據(jù)存成csv文件import?pandas?as?pd
df?=?pd.DataFrame(item_list)#?保證不亂碼
df.to_csv('哪吒短評(píng)數(shù)據(jù).csv',?encoding='utf_8_sig')
2 詞云可視化
1)jieba分詞
參考博客:
https://blog.csdn.net/dnxbjyj/article/details/72854460? ?
結(jié)巴分詞 是針對(duì)字符串進(jìn)行處理的,分詞后 會(huì)返回一個(gè)列表或者迭代器,你需要用 字符串的join方法,把詞語列表 重新拼接成一個(gè)字符串,然后把內(nèi)容給到 wordcloud 生成詞云。
import?pandas?as?pd
import?jieba#?讀取數(shù)據(jù)
df?=?pd.read_csv('哪吒短評(píng)數(shù)據(jù).csv',?encoding='utf-8-sig')text?=?''
#?獲得wordcloud?需要的?文本格式
for?line?in?df['content']:text?+=?'?'.join(jieba.cut(str(line),?cut_all=False))??#?結(jié)巴分詞
2)詞云展示
創(chuàng)建一個(gè)詞云對(duì)象,添加一些基本設(shè)置。比如,中文字體,背景圖片,停用詞等等。然后,根據(jù)上文中的 text,生成詞云。
我們可以看一下,文本中最高頻的50個(gè)詞。并把詞云保存為本地圖片。
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')??#?背景圖#?詞云的一些參數(shù)設(shè)置
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('結(jié)果.jpg')
print('生成詞云成功!')
看一下高頻詞的結(jié)果。?
[('哪吒',?24),?('電影',?9),?('這部',?8),?('故事',?8),?
('動(dòng)畫',?6),?('國產(chǎn)?動(dòng)畫',?6),?('不由',?5),?('國漫',?5),?
('想象力',?5),?('國產(chǎn)',?5),?('人物',?5),?('我命',?4),?('一部',?4),?
('中國',?4),?('觀眾',?4),?('更是',?4),?('角色',?3),?('成見',?3),('笑料',?3),?('暑期',?3),?('不錯(cuò)',?3),?('有人',?3),?('神話',?3),?
('形式',?3),?('良心',?3),?('熱血',?3),?('動(dòng)畫電影',?3),?('成熟',?3),?
('優(yōu)秀',?3),?('白蛇',?3),?('喜劇',?3),?('改編',?3),?('內(nèi)核',?3),?
('最佳',?3),?('飽滿',?3),?('作品',?3),?('高潮',?3),?('場(chǎng)面',?3),
('大圣?歸來',?3),?('缺陷',?2),?('本片',?2),?('打破',?2),?
('偏見',?2),?('政治',?2),?('正確',?2),?('妖怪',?2),?
('爛片',?2),?('社稷',?2),?('震撼',?2),?('封神',?2)]
看一下詞云。
總結(jié)來了
我把文章中的一些重要的內(nèi)容,總結(jié)在了下面的一張圖里,方便大家保存、查閱。
我把源文件及相關(guān)數(shù)據(jù)都打包好了,后臺(tái)回復(fù)【哪吒】,一鍵提取。
這個(gè)小例子,挺基礎(chǔ)的,適合入門的同學(xué),但知識(shí)點(diǎn)也挺多的。
推薦閱讀:(點(diǎn)擊下方標(biāo)題即可跳轉(zhuǎn))沒看完這11 條,別說你精通 Python 裝飾器
張飛比關(guān)羽還能打?一位酷愛三國的日本程序員,用NLP分析了武將們的戰(zhàn)斗力??歡迎長(zhǎng)按圖片識(shí)別二維碼關(guān)注~
總結(jié)
以上是生活随笔為你收集整理的爬取《哪吒》豆瓣短评,我得到了什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。