本文原創釋出在公眾號:「GitPython 」

關注公眾號「GitPython」,後臺回覆「

哪吒短評

」,獲取完整原始碼。

爬取《哪吒》豆瓣短評,我獲得了什麼?

這段時間,《哪吒》爆火。

於是,就想看看,關於《哪吒》的評價。

為什麼選擇豆瓣?

質量和口碑還不錯吧。

可是,折騰一波之後,發現了這個。

豆瓣從2017。10月開始全面禁止爬取資料,僅僅開放500條資料,白天1分鐘最多可以爬取40次,晚上一分鐘可爬取60次數,超過此次數則會封禁IP地址。

爬取《哪吒》豆瓣短評,我獲得了什麼?

豆瓣網站

登入狀態下,按網頁按鈕點選“後頁”,引數“start”最多為480,也就是20*25=500條;非登入狀態下,最多為200條。

行吧,500條就500條吧,Let‘s go。

整個過程分為

獲取豆瓣短評資料

詞雲視覺化

1 獲取短評資料

1)爬蟲原理簡單分析

爬取《哪吒》豆瓣短評,我獲得了什麼?

爬蟲原理簡單分析

2)需求分析

好了,爬蟲的基本思路我們已經瞭解了。

現在,開始幹活了。

首先,我們開啟短評的url地址:

https://

movie。douban。com/subjec

t/26794435/comments?status=P

我們想要獲取以下內容:

-使用者名稱稱

-評分

-短評內容

爬取《哪吒》豆瓣短評,我獲得了什麼?

獲取的內容

3)URL解析

要想獲取資料,我們先來分析一下URL。

爬取《哪吒》豆瓣短評,我獲得了什麼?

爬取《哪吒》豆瓣短評,我獲得了什麼?

URL解析

4)傳送請求,獲取響應

根據url,我們可以傳送請求了,

注意攜帶cookie

爬取《哪吒》豆瓣短評,我獲得了什麼?

cookie

先來爬一頁,看看結果。

import

requests

headers

=

{

’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檔案

2 詞雲視覺化

1)jieba分詞

參考部落格:

https://

blog。csdn。net/dnxbjyj/a

rticle/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

’生成詞雲成功!‘

爬取《哪吒》豆瓣短評,我獲得了什麼?

詞雲

你看懂了嗎?

覺得文章還不錯的話,分享給更多人吧!