[toc] # 一、爬蟲對象-豆瓣電影短評 您好!我是[@馬哥python說](https://www.cnblogs.com/mashukui/),一名10年程式猿。 今天分享一期爬蟲案例,爬取的目標是:豆瓣上任意一部電影的短評(註意:是短評,不是影評!),以《熱烈》這部電影為例: ![爬取目標] ...
目錄
一、爬蟲對象-豆瓣電影短評
您好!我是@馬哥python說,一名10年程式猿。
今天分享一期爬蟲案例,爬取的目標是:豆瓣上任意一部電影的短評(註意:是短評,不是影評!),以《熱烈》這部電影為例:
爬取以上6個關鍵欄位,含:
頁碼, 評論者昵稱, 評論星級, 評論時間, 評論者IP屬地, 有用數, 評論內容。
二、爬取結果
爬取結果截圖:
三、爬蟲代碼講解
首先,導入需要用到的庫:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import os
import random
from time import sleep
定義一個請求頭:
# 請求頭
h1 = {
'Cookie': '換成自己的cookie',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Host': 'movie.douban.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Referer': 'https://movie.douban.com/subject/35267224/?from=showing',
'Connection': 'keep-alive'
}
定義請求地址:(規律是:第1頁start是0,第2頁start是20,第3頁start是40,所以總結出:start=(page-1)*20)
# 請求地址
url = 'https://movie.douban.com/subject/{}/comments?start={}&limit=20&status=P&sort=new_score'.format(v_movie_id, (page - 1) * 20)
用requests發送請求:
# 發送請求
response = requests.get(url, headers=h1, verify=False)
用BeautifulSoup解析頁面數據:
# 解析頁面數據
soup = BeautifulSoup(response.text, 'html.parser')
定義一些空列表,用於存放數據:
user_name_list = [] # 評論者昵稱
star_list = [] # 評論星級
time_list = [] # 評論時間
ip_list = [] # 評論者ip屬地
vote_list = [] # 有用數
content_list = [] # 評論內容
以"評論內容"欄位為例:
for review in reviews:
# 評論內容
content = review.find('span', {'class': 'short'}).text
content = content.replace(',', ',').replace(' ', '').replace('\n', '').replace('\t', '').replace('\r', '')
content_list.append(content)
把所有欄位存放的列表數據組成Dataframe格式:
df = pd.DataFrame(
{
'頁碼': page,
'評論者昵稱': user_name_list,
'評論星級': star_list,
'評論時間': time_list,
'評論者IP屬地': ip_list,
'有用數': vote_list,
'評論內容': content_list,
}
)
進一步保存到csv文件里:
# 保存到csv
df.to_csv(result_file, mode='a+', header=header, index=False, encoding='utf_8_sig')
print('文件保存成功:', result_file)
以上,核心邏輯講解完畢。
代碼中還含有:轉換星級函數、自動翻頁、文本清洗等功能,詳見文末完整源碼。
最後需要說明的是,豆瓣短評頁面上最多只能看到30頁,再往後翻頁面一直顯示載入中,所以該代碼最多只能爬取30頁短評。
三、演示視頻
演示視頻:【Python爬蟲實戰】爬取豆瓣電影短評,以《熱烈》為例
四、獲取完整源碼
愛學習的小伙伴,本次分析過程的完整python源碼及結果數據,我已打包好,並上傳至我的微信公眾號"老男孩的平凡之路",後臺回覆"爬豆瓣短評"即可獲取。
我是@馬哥python說,一名10年程式猿,持續分享python乾貨中!