python爬取豆瓣影評,python爬取豆瓣小組_Python 爬蟲實例+爬取豆瓣小組 + wordcloud 制作詞云圖

 2023-10-08 阅读 33 评论 0

摘要:目標利用PYTHON爬取如下圖中所有回答的內容,并且制作詞云圖。用到的庫import requests# import jsonpython爬取豆瓣影評、from PIL import Imagefrom pyquery import PyQuery as pqfrom requests import RequestExceptionimport csvfrom wordcloud import WordCloud, S

目標

利用PYTHON爬取如下圖中所有回答的內容,并且制作詞云圖。

用到的庫

import requests

# import json

python爬取豆瓣影評、from PIL import Image

from pyquery import PyQuery as pq

from requests import RequestException

import csv

from wordcloud import WordCloud, STOPWORDS

import numpy as np

python爬取網頁,# import matplotlib.pyplot as plt

import jieba

import re

需要確保已經安裝好以上幾個常用的庫。具體的操作直接 pip install xxx?就好了,推薦使用國內源安裝,具體的請看我的另一篇博客https://blog.csdn.net/qq_41655933/article/details/89637657

話不多說,開始操作!

爬蟲階段

python 豆瓣。1.?獲取網頁源碼

首先我們要爬取的網址是https://www.douban.com/group/topic/82916031/?start=0

點看第二面?https://www.douban.com/group/topic/82916031/?start=100

發現start變為了100。這樣以來,爬取就有規律了。只要每次爬取一個頁面,使start值加100就ok了。

于是寫出以下代碼。

def get_one(page):

python爬蟲網頁,"""

爬取一頁

:param page: start數

:return: html源碼

"""

try:

爬蟲爬取數據、headers = {

# 'Cookie': 'bid=kCNfNn6nvxA; __utmz=30149280.1564815097.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __yadk_uid=CvRkxvch6yW4IwpqONlyGzPCB1GznXLV; douban-fav-remind=1; ap_v=0,6.0; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1568964489%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D2p9zSFnHJuYwVjtaUY6Smc_R8lvOe0b5EatQr75zQywo5qIDZ1s5EUIST8Jw0K3qpAoQXJLWDJHTyx6jNbRq-a9MIbUXwkq4V8vrhxYGdqO%26wd%3D%26eqid%3Dd4a8230500089ac3000000055d452e46%22%5D; _pk_id.100001.8cb4=ef75a07b06bad72b.1564815095.2.1568964489.1564815095.; _pk_ses.100001.8cb4=*; __utma=30149280.546149049.1564815097.1564815097.1568964491.2; __utmc=30149280; __utmt=1; __utmb=30149280.3.8.1568964491',

'Host': 'www.douban.com',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36', # 瀏覽器標識

}

url = 'https://www.douban.com/group/topic/82916031/?start={}'.format(page) # url

python爬蟲教程、response = requests.get(url, headers=headers)

if response.status_code == 200:

return response.text

except RequestException:

return None

2.?解析HTML

我們在瀏覽器中,右擊網頁點擊‘檢查’選項,進入開發者模式。我們可在elements找到我們想要找到的對象,如下圖

python有什么用。藍色區域就是我們想要爬取的對象。此處解析要用到pyquery,用css選擇器表示該對象的路徑為:#comments li .reply-doc。

def parse_one(html):

"""

解析一頁源碼

:param html:html源碼

:return:返回生成器,用于迭代

qpython,"""

doc = pq(html) # 初始化

items = doc('#comments li .reply-doc').items() # css選擇器選擇所有該標簽

# print(items.size()) # 評論的個數

for item in items:

yield {

python爬取豆瓣電影top250。'name': item.find('h4 a').text(), # 用戶名

'address': item.find('h4 a').attr('href'), # 用戶主頁

# 'signature': item.find('h4').text(), # 個性簽名

'time': item.find('h4 span').text(), # 回復時間

'reply': item.find('p').text(), # 回復內容

'quote-reply': item.find('.reply-quote .short').text(), # 引用的回復內容

python為什么叫爬蟲、'quote-user': item.find('.reply-quote .pubdate').text(), # 引用的用戶名

'quote-user-addr': str(item.find('.reply-quote .pubdate a').attr('href')).strip() if item.find('.reply-quote .pubdate a').attr('href') else '', # 引用的用戶的主頁

# 'vote': item.find('.comment-vote').text() # 贊

}

至此,用上面兩個函數就可以?利用for循環?將每一頁的內容可以爬取下來了。

現在,我們還需要將結果保存下來。

python爬取豆瓣電影并分析,3.?保存數據到csv文件

def write_csv(contents):

"""

寫入數據到csv文件

:param contents: 解析的內容,可迭代

:return:

python簡單爬蟲代碼、"""

with open('douban.csv', 'a', encoding='utf-8') as f: # 追加方式寫數據

fieldnames = ['name', 'address', 'time', 'reply', 'quote-reply', 'quote-user', 'quote-user-addr'] # 第一行

write = csv.DictWriter(f, fieldnames=fieldnames, lineterminator='\n') # 消除多余的換行,不加lineterminator會出現每寫一行空一行的情況。

write.writeheader()

for content in contents:

用python爬取網站數據?print(type(content))

write.writerow(content)

同樣的,我們還需要寫一個讀取csv文件的函數,以便將所有的回復讀取出來

4.?讀取csv文件

def read_csv():

"""

利用python進行數據分析豆瓣?將回復的內容保存在列表中并返回

:return:

"""

reply = []

n = 0

with open('douban.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

for row in reader:

if row[4] != 'quote-reply':

reply.append(row[3])

return reply

5.執行代碼

到這里,爬蟲階段結束。我們還要執行以下代碼段以保存所有數據:

for i in range(15):

write_csv(parse_one(get_one(i * 100)))

查看保存的文件:

詞云圖階段

1.分詞

因為wordcloud對中文的分詞不友好,所以我們在這里使用jieba分詞。結巴分詞各位同學可以在github上查看它的介紹,鏈接如下https://github.com/fxsjy/jieba

def text_chinese():

"""

利用jieba進行中文分詞

:return: 分詞后的字符串

"""

t = read_csv() # 讀取回復內容

text = ''.join(t) # 列表拼接成字符串

text = re.sub('[a-zA-Z0-9\s\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\\/\?\~\。\@\#\\\&\*\%]+', '', text) # 利用正則表達式,去除字符串中的數字英文等字符。

jieba_list = jieba.cut(text) # jieba給字符串分詞,得到分詞列表

word_list = ' '.join(jieba_list) # 將分詞列表,用空格連接成字符串

print(word_list)

return word_list

2.wordcloud 制作詞云圖

準備工作做完了,接下來只需要利用wordcloud生成詞云圖就完事了。

wordcloud參數含義可參考?https://www.cnblogs.com/delav/articles/7837975.html

# 生成詞云圖

# con = jieba.cut('jieba是什么東西')

# words = ' '.join(con)

# print(words)

words = text_chinese() # 分詞后的字符串

font = r'?C:\Windows\Fonts\msyh.ttc' # 字體路徑

stopword = set(STOPWORDS) #設置停用詞,STOPWORDS為wordcloud自帶的英文停用詞,其他的可以自己添加。

stopword.add('謝謝')

stopword.update({'可以', '謝謝', '樓主', '希望', '中文名', '英文名', '名字'})

# 圖片模板 在這里博主設置的圖片為湖北地圖。

image = np.array(Image.open('hubei.jpg'))

wc = WordCloud(font_path=font, # 中文必須設置字體,不然圖片會顯示方框

background_color='white', # 背景為白色

# width=800, # 畫布寬度

# height=800, # 畫布高度

mask=image, # 圖片模版,wordcloud會在圖片中非白色的那塊填充文字。若有該參數則忽略設置的寬高值。

scale=5, # 按照比例放大畫布

stopwords=stopword) # 停用詞

wc.generate(words) # 根據文本生成詞云

wc.to_file('wordCloud.png') # 保存圖片

ima = wc.to_image() # 顯示圖片

ima.show()

# plt.imshow(wc) # 用plt顯示圖片

# plt.axis('off') # 設置坐標軸不可見

# plt.show() # 顯示圖片

結束

運行以上代碼可以在當前文件夾查看已經生成好的詞云圖。

同學們學會了嗎?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/138861.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息