愛情公寓電影好不好,評論告訴你。今天我們來用python爬蟲獲取豆瓣網上愛情公寓的評論。
首先我們分析一下評論的URL規則
https://movie.douban.com/subject/24852545/comments?start=0&limit=20&sort=new_score&status=P
https://movie.douban.com/subject/24852545/comments?start=20&limit=20&sort=new_score&status=P
https://movie.douban.com/subject/24852545/comments?start=40&limit=20&sort=new_score&status=P
發現每頁的改變只更改start參數,每頁顯示20條數據。所以我們更改start參數就可以實現換頁面爬數據了。
開始代碼
導入requests和lxml。如果沒有就去下載
接下來的說明直接在代碼段寫註釋吧。。。。
#導包
from lxml import etree
import requests
#我們提到的start變量,改變start就能換頁
start=20
#愛情公寓豆瓣點評
url="https://movie.douban.com/subject/24852545/comments"
#存所有解析後獲得數據的集合
movies=[]
#吧網頁的評論讀取到集合的函數
def moviecomments(text):
#使用etree解析
html = etree.HTML(text)
#使用xpath精確到每一條評論
div=html.xpath("//div[@class='mod-bd']")
list = div[0] if div else None
items = list.xpath(".//div[@class='comment-item']") if list else None
if(items==None): #爲空判斷,如果爲空就退出函數繼續運行,防止報錯
return
#循環評論、下面是根據網頁的規則來獲取數據
for item in items:
avatar = item.xpath(".//a/@title")[0]
pingjia = item.xpath(".//span[@class='comment-info']/span[position()=2]/@title")[0]
time = item.xpath(".//span[@class='comment-info']/span[last()]/@title")[0]
content = item.xpath(".//p/span/text()")[0]
#保存到movie中
movie = {
'avatar' : avatar,
'pingjia' : pingjia,
'time' : time,
'content' : content
}
添加到movies集合
movies.append(movie)
#輸出一下
print(movie)
#把集合內的數據寫到文本
def write_text():
#寫出文本的操作
with open("愛情公寓評論.txt","w",encoding="utf-8") as fh:
fh.write("發言人\t評分\t時間\t內容\n")
#遍歷集合內的數據,寫出
for movie in movies:
pingjia1 = movie.get("pingjia")
if (len(movie.get("pingjia")) > 2):
pingjia1 = "未知"
print(movie.get("avatar") + "\t" + pingjia1 + "\t" + movie.get("time") + "\t" + movie.get("content") + "\n")
fh.write(movie.get("avatar") + "\t" + pingjia1 + "\t" + movie.get("time") + "\t" + movie.get("content") + "\n")
#這是方法的開始
if __name__ == '__main__':
#循環1000,從0-1000,間隔是20
for i in range(0, 1000, 20):
#每次循環對start進行賦值。實現翻頁
start=i
# 瀏覽器的請求頭
header = {
'User-Agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36",
'Referer': "https://movie.douban.com/subject/24852545/comments?start=" + str(
start) + "&limit=20&sort=new_score&status=P"
}
# 請求參數
params = {
'start': str(start),
'limit': "20",
'sort': "new_score",
'status': "P"
}
#在循環裏面使用requests發送請求
respone = requests.get(url=url, headers=header, params=params)
#獲得respone的字節流
text=respone.text
#調用獲取解析數據的函數
moviecomments(text)
#調用寫出文本的函數
write_text()
覺得有用?支持一下唄。。沒積分花了
https://download.csdn.net/download/qq_40335081/10609651
源碼地址