python3爬蟲教學:愛情公寓電影評論

戳我愛情公寓電影評論地址

愛情公寓電影好不好,評論告訴你。今天我們來用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
源碼地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章