爬蟲之豆瓣詞云

2022-06-30 03:18:07 字數 4628 閱讀 5380

from urllib import

request

from bs4 import

beautifulsoup as bs

import

reimport

codecs

import jieba #

分詞包import numpy #

numpy計算包

import pandas as pd #

分詞用到

import matplotlib.pyplot as plt #

繪圖包import

matplotlib

matplotlib.rcparams[

'figure.figsize

'] = (10.0,5.0)

from wordcloud import wordcloud #

詞云包#

爬取豆瓣最受關注圖書榜

defgettopchartbook_list():

resp = request.urlopen('

')html_data = resp.read().decode('

utf-8')

#轉化為beautifulsoup物件

soup = bs(html_data,'

html.parser')

#搜尋最受關注的圖書列表

topchart_book =soup.find_all('

ul',class_='

chart-dashed-list')

#搜尋列表中所有圖書

topchart_book_list = topchart_book[0].find_all('

li',class_='

media clearfix')

#新建陣列用於存放後續的資料

topchart_list =

#遍歷圖書館列表,從中過濾出我們所需的資訊

for item in

topchart_book_list:

#新建字典用於存放我們的圖書資訊,之後可用class來儲存

topchart_dict ={}

#搜尋到具體資訊的位置

book_item = item.find('

a',class_='

fleft')

#得到圖書id

topchart_dict['

id'] = book_item['

href

'].split('

/')[4]

#得到圖書名稱

topchart_dict['

name

'] = book_item.gettext().replace('

\t','').replace('

\n','').replace('

','') #

圖書名字

#將圖書資訊加入到陣列中

return

topchart_list

#def

getcommentbyid(bookid,pagenum):

# eachcommentlist =

if pagenum<0:

return

false

requrl = '

'+ bookid +'

/comments/hot

'+'?

'+'p=

'+str(pagenum)

print

(requrl)

# resp =request.urlopen(requrl)

html_data = resp.read().decode('

utf-8')

soup = bs(html_data,'

html.parser')

# comment_div_lits = soup.find_all('

div',class_='

comment')

for item in

comment_div_lits:

if item.find_all('

p')[0].string is

notnone:'p

')[0].string)

return

eachcommentlist

defmain():

# commentlist =

topchartbook_list =gettopchartbook_list()

for i in range(10):

num = i + 1commentlist_temp = getcommentbyid(topchartbook_list[0]['id'

],num)

#為了方便進行資料進行清洗,我們將列表中的資料放在乙個字串陣列中

commits = ''

for k in

range(len(commentlist)):

commits = commits +(str(commentlist[k])).strip()

#print(commits)

#exit()##

這些符號對我們進行詞頻統計根本就沒有用,因此將他們清除,所用的方法是正規表示式

pattern = re.compile(r'

[\u4e00-\u9fa5]+')

filterdata =re.findall(pattern,commits)

cleaned_comments = ''

.join(filterdata)

##print(eachcommentlist)##

print(commits)##

print(cleaned_comments)

#exit()

#在這裡使用的是結巴分詞,如果沒有安裝結巴分詞,可以在控制台用 pip install jieba安裝

segment =jieba.lcut(cleaned_comments)

#print(segment)

#exit()

#可以使用pandas庫將分詞轉化成dataframe格式,head()方法只檢視前五項內容

words_df = pd.dataframe()

#print(words_df)

#print(words_df.head())

#exit()

#可以看到我們的資料中有「我」、「很」等虛詞(停用詞)

#而這些詞在任何場景中都是高頻時,並且沒有實際含義,所以我們要對他們進行清除

#把停用詞放在乙個stopwords.txt檔案中,將我們的資料與停用詞進行對比即可

stopwords=pd.read_csv("

stopwords.txt

",index_col=false,quoting=3,sep="

\t",names=['

stopword

'],encoding='

gbk'

)

#print(stopwords)

#exit()

words_df=words_df[~words_df.word.isin(stopwords.stopword)]

#print(words_df.head())

#exit()

#接下來進行詞頻統計

words_stat=words_df.groupby(by=['

word

'])['

word

'].agg(['

count'])

#print(words_stat.head())

#對統計結果進行排序

words_stat=words_stat.reset_index().sort_values(by=["

count

"],ascending=false)

#print(words_stat.head())

#詞云展示

wordcloud = wordcloud(font_path="

simhei.ttf

",background_color="

white

",max_font_size=80) #

指定字型型別、字型大小、背景顏色

word_frequence =

#print(word_frequence)

wordcloud =wordcloud.fit_words(word_frequence)

#print(wordcloud)

#exit()

#matplotlib包對進行繪製,繪製成功後,返回乙個axesimage物件,要在視窗上顯示這個物件,我們可以用show()函式進行

#在某些練習環境下可以省略show()函式,也能自動顯示出來

plt.imshow(wordcloud)

plt.axis(

"off")

plt.show()

wordcloud.to_file(

'tutorial/python/images/books/

'+str(topchartbook_list[0]['

id'])+'

.png')

#主函式

main()

爬蟲 and 詞云 結合例子

import jieba.analyse from wordcloud import wordcloud,imagecolorgenerator,stopwords from imageio import imread import matplotlib.pyplot as plt from url...

網路爬蟲之豆瓣電影

python作為最易上手的程式語言之一,在很多領域的應用已經相對成熟,尤其是一些工具應用類的場景,比如本文要介紹的網路爬蟲。網路爬蟲目前比較成熟的方法有三種,在python中都有現有打包好的包 庫,直接呼叫,非常方便。本篇部落格只關注網路爬蟲的應用層面,重點放在如何解決實際問題,所以對三種方法的理論...

python爬蟲 豆瓣

在爬蟲時候,通過requests.get 得到不正確的狀態碼 4 表示出錯 異常狀態碼檢視 fr aladdin 4 19 用requests庫的get 函式抓取乙個你平時經常使用的 主頁,並檢視該 的爬蟲協議 如果有的話 預設答案是正確,你成功了嗎?fp.write r.content b.有些 ...