python 《我不是藥神》豆瓣影評爬取

python 版本3.6 

爬取豆瓣上的《我不是藥神》的評論,代碼直接粘貼在下面了,注意把其中的headers,替換成自己的。具體的方法是打開豆瓣官網,然後 右鍵 審查元素,點擊network,刷新,找到第一個鏈接就能點擊, 然後右側就能出現了,之後下來會看到requests headers,那裏就是,如下圖所示:

之後將那裏面的東西複製出來,粘貼到代碼裏的headers出就可以了。有寫的不明白的地方,歡迎在下面留言,我們一起交流啊

import requests
from bs4 import BeautifulSoup
from urllib import parse
import time
import random

headers = {
    """
        換成你自己的headers(字典格式)
    """
}

session = requests.Session()
session.headers.update(headers)

file = open('yaoshen.txt','a',encoding='utf-8')

def url_create():
    """
        創建url
    """
    start_url = "https://movie.douban.com/subject/26752088/comments?"
    for page in range(11):
       #這些參數可以在headers下面的query string parameters 裏面
        params = {
            'start':page*20,   #這個是控制當前頁的
            'limit':20,    #每頁限制的數量
            'sort':'new_score',
            'status':'P',
            }
        url = start_url + parse.urlencode(params)
        yield url

def html_get(url, num_retries=2):
    """
        獲取網頁源代碼,網絡連接有風險,注意用try...except..else...finally 結構
    """
    global session
    try:
        time.sleep(random.random()*5)    #設計隨機延時,防止被封ip
        html = session.get(url).content  #獲取html
    except:
        if num_retries > 0:
            html_get(url, num_retries-1)
        else:
            print("下載失敗:",url)
    else:
        return html

def info_get(html):
    """
        信息獲取了很多,比如網友暱稱,個人主頁鏈接,頭像,參與投票人數,評論內容,至於日期沒有加                上去,有興趣的話,可以自己加上
    """
    info_item = {}  #存儲字典
    soup = BeautifulSoup(html, 'lxml')
    comments = soup.find(id='comments')
    for comment in comments.find_all(class_="comment-item"):
        print(len(comments))
        #print(comment)
        ava_a = comment.find(class_="avatar").find('a') 
        info_item = {
                'nickname':ava_a.attrs['title'],
                'link': ava_a.attrs['href'],
                'img_link': ava_a.find('img').attrs['src'],
            }
        com = comment.find(class_="comment")
        #print(com)
        info_item['votes'] = com.find(class_="comment-vote").find(class_="votes").string
        info_item['content'] = com.find('p').find('span').string.replace('\n','')

        yield info_item  #將提取的信息返回

def info_show(item):
    """
        因爲我接下來想做文本分析,並將最終的評論結果做成詞雲,找出其中出現次數最多的詞,所以這裏只保存了評論,還是將結果保存到了文本里,想保存全部結果的話,因爲數據不是很多,可以採用csv,需要在開頭加上 import csv, 之後添加csv的保存模塊就可以了
    """
    global file
    print("短評內容是:",item['content'])
    file.write(item['content'] + ' ')

def main():
    """
        調度程序
    """
    for url in url_create():
        html = html_get(url)
        #對結果進行判斷
        if html == None:
            print('html出錯:', html)
        else:
            item_list = info_get(html)
            for item in item_list:
                info_show(item)

if __name__ == '__main__':
    try:
        main()
    finally:
        file.close()   #關閉文件

 

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