1. 程式人生 > >python 爬取豆瓣電影評論,並進行詞雲展示及出現的問題解決辦法

python 爬取豆瓣電影評論,並進行詞雲展示及出現的問題解決辦法

本文旨在提供爬取豆瓣電影《我不是藥神》評論和詞雲展示的程式碼樣例
1、分析URL
2、爬取前10頁評論
3、進行詞雲展示
1、分析URL
我不是藥神 短評
第一頁url
https://movie.douban.com/subject/26752088/comments?start=0&limit=20&sort=new_score&status=P
第二頁url
https://movie.douban.com/subject/26752088/comments?start=20&limit=20&sort=new_score&status=P



第十頁url
https://movie.douban.com/subject/26752088/comments?start=180&limit=20&sort=new_score&status=P


分析發現每次變化的只是…strat=後面的數字,其他內容不變,可以以此遍歷每一頁的評論。
2、爬取前10頁評論
程式碼:
import urllib.request
from bs4 import BeautifulSoup

def getHtml(url):
"""獲取url頁面"""
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
req = urllib.request.Request(url,headers=headers)
req = urllib.request.urlopen(req)
content = req.read().decode('utf-8')

return content

def getComment(url):
"""解析HTML頁面"""
#html = getHtml(url)
response = urllib.request.urlopen(url)
html = response.read()
html = html.decode('utf-8','ignore')
soupComment = BeautifulSoup(html, 'html.parser')

comments = soupComment.findAll('span', 'short')
onePageComments = []
for comment in comments:
    # print(comment.getText()+'\n')
    onePageComments.append(comment.getText()+'\n')

return onePageComments

if name == 'main':
f = open('我不是藥神page10.txt', 'w', encoding='utf-8')
for page in range(10): #爬取10頁的評論
url = 'https://movie.douban.com/subject/26752088/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'
print('第%s頁的評論:' % (page+1))
print(url + '\n')
for i in getComment(url):
f.write(i)
print(i)
print('\n')

★★問題出現:
(1)當IDLE Python3.5執行時出現下面問題:

執行結果的檔案“我不是藥神page10.txt”是空白的
(2)在cmd下執行出現:

執行結果的檔案“我不是藥神page10.txt”是隻有一小部分
★★★★完美解決辦法:
修改控制檯編碼:

命令列輸入  chcp

輸出顯示:活動內碼表: 936

表示當前的編碼是預設的gbk

修改編碼:

命令列輸入  chcp 65001

表示轉換成utf8

字型選擇Lucida Console

然後可以成功print爬取的中文文章

★★★★★★★★常見編碼:

utf8    所有語言
gbk 簡體中文
gb2312  簡體中文
gb18030 簡體中文
big5    繁體中文
big5hkscs   繁體中文

3、進行詞雲展示
程式碼:
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from scipy.misc import imread
import jieba

text = open("我不是藥神page20.txt","rb").read()

結巴分詞

wordlist = jieba.cut(text,cut_all=True)
wl = " ".join(wordlist)

print(wl)#輸出分詞之後的txt

把分詞後的txt寫入文字檔案

fenciTxt = open("fenciHou.txt","w+")
fenciTxt.writelines(wl)
fenciTxt.close()

設定詞雲

wc = WordCloud(background_color = "white", #設定背景顏色
mask = imread('hai.jpg'), #找張圖片設定背景圖片
max_words = 2000, #設定最大顯示的字數
stopwords = ["的", "這種", "這樣", "還是", "就是", "這個"], #設定停用詞
font_path = "C:\Windows\Fonts\simkai.ttf", # 設定為楷體 常規
#設定中文字型,使得詞雲可以顯示(詞雲預設字型是“DroidSansMono.ttf字型庫”,不支援中文)
max_font_size = 60, #設定字型最大值
random_state = 30, #設定有多少種隨機生成狀態,即有多少種配色方案
)
myword = wc.generate(wl)#生成詞雲
wc.to_file('result.jpg')

展示詞雲圖

plt.imshow(myword)
plt.axis("off")
plt.show()
結果: