Python爬蟲爬取豆瓣電影評論內容,評論時間和評論人

Python爬蟲爬取豆瓣電影評論內容,評論時間和評論人

我們可以看到影評比較長,需要展開才能完整顯示。但是在網頁源碼中是沒有顯示完整影評的。所以我們考慮到這部分應該是異步加載的方式顯示。所以打開網頁的開發者選項,可以看到點擊展開之後,多了一條full的網頁。這個網頁就包含了完整評論。
我們觀察到全部評論所在的網址爲https://movie.douban.com/j/review/9593388/full

獲取索引頁https://movie.douban.com/review/best/?start=0,索引頁只需要改變start=0,20,40即可訪問下一頁
解析索引頁,把索引頁中的10個評論的ID獲取到
通過獲取到的ID構建完整評論網址https://movie.douban.com/j/review/’ + str(id) + '/full
解析評論頁,獲取評論者姓名和評論內容,寫入txt文件
附上源碼:

import urllib.request
import re
comment = 'E:\\pachong\\bais.txt'
T='<span content=".*?" class=".*?">.*?</span>'
for i in range(10):
    print("獲取第"+str(i+1)+"頁")
    url = "https://movie.douban.com/subject/30331149/reviews?start="+str(i*20)  # 確定要爬取的入口鏈接 
    # 模擬成瀏覽器並爬取對應的網頁 谷歌瀏覽器
    headers = {'User-Agent',
               'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    data = opener.open(url).read().decode('utf8')
    time_pattern = re.compile('<span content=".*?" class=".*?">(.*?)</span>', re.S)
    time = re.findall(time_pattern, data)
    id_pattern= re.compile('<h2><a href="https://movie.douban.com/review/(.*?)/', re.S)
    id= re.findall(name_pattern, data)
    for j in range(len(id)):
        html = 'https://movie.douban.com/j/review/' + str(id[j]) + '/full'
        data = opener.open(html).read().decode('utf8')
        html = data
        content_pattern = re.compile('data-original(.*?)main-author', re.S)
        content = re.findall(content_pattern, html)
        text_pattern = re.compile('[\u4e00-\u9fa5|,、“”‘’:!~@#¥【】*()——+。;?]+', re.S)
        text = re.findall(text_pattern, content[0])
        text = ''.join(text)
        name_pattern = re.compile('data-author=.*?"(.*?)"', re.S)
        name = re.findall(name_pattern, html)
        with open(comment, 'a', encoding='utf-8-sig') as f:
            f.write(name[0].strip('\\') + '\n')
            f.write(time[j]+'\n')
            f.write(str(text) + '\n')
            f.write('\n')
            f.close()

一個認識的朋友發現了一個地方寫錯了 現已修改 完全可以使用 原來報錯找不到id 是我寫錯了 現在代碼已修正 可以使用

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