一篇文章教會你利用Python網絡爬蟲實現豆瓣電影採集

點擊上方“IT共享之家”,進行關注

回覆“資料”可獲贈Python學習福利

【一、項目背景】

    豆瓣電影提供最新的電影介紹及評論包括上映影片的影訊查詢及購票服務。可以記錄想看、在看和看過的電影電視劇 、順便打分、寫影評。極大地方便了人們的生活。

    今天以電視劇(美劇)爲例,批量爬取對應的電影,寫入csv文檔 。用戶可以通過評分,更好的選擇自己想要的電影。

【二、項目目標】

    獲取對應的電影名稱,評分,詳情鏈接,下載 電影的圖片,保存文檔。

【三、涉及的庫和網站】

1、網址如下:

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}

2、涉及的庫:requests、fake_useragent、json、csv

3、軟件:PyCharm

  

【四、項目分析】

1、如何多網頁請求?

    點擊下一頁時,每增加一頁paged自增加20,用{}代替變換的變量,再用for循環遍歷這網址,實現多個網址請求。

2.  如何獲取真正請求的地址?

     請求數據時,發現頁面上並沒有對應數據。其實豆瓣網採用javascript動態加載內容,防止採集。

    1)F12右鍵檢查,找到Network,左邊菜單Name , 找到第五個數據,點擊Preview。

   

    2)點開subjects,可以看到 title 就是對應電影名稱。rate就是對應評分。通過js解析subjects字典,找到需要的字段。

3.  如何網頁訪問?

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0


https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=20


https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=40


https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=60

    當點擊下一頁時,每增加一頁page自增加20,用{}代替變換的變量,再用for循環遍歷這網址,實現多個網址請求。

【五、項目實施】

1、我們定義一個class類繼承object,然後定義init方法繼承self,再定義一個主函數main繼承self。導入需要的庫和請求網址。

import requests,json
from fake_useragent import UserAgent
import csv


class  Doban(object):
    def __init__(self):
      self.url = "https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}"


    def main(self):
        pass


if __name__ == '__main__':
    Siper = Doban()
    Siper.main()

2、隨機產生UserAgent,構造請求頭,防止反爬。

 for i in range(1, 50):
            self.headers = {
                'User-Agent': ua.random,
            }

3、發送請求 ,獲取響應,頁面回調,方便下次請求。

    def get_page(self, url):
        res = requests.get(url=url, headers=self.headers)
        html = res.content.decode("utf-8")
        return html

4、json解析頁面數據,獲取對應的字典。

    data = json.loads(html)['subjects']
    # print(data[0])

5、for遍歷,獲取對應的電影名、 評分、下詳情頁鏈接。

      print(name, goblin_herf)
      html2 = self.get_page(goblin_herf)  # 第二個發生請求
      parse_html2 = etree.HTML(html2)
      r = parse_html2.xpath('//div[@class="entry"]/p/text()')

6、創建csv文件進行寫入,定義對應的標題頭內容,保存數據 。

    # 創建csv文件進行寫入
    csv_file = open('scr.csv', 'a', encoding='gbk')
    csv_writer = csv.writer(csv_file)
    # 寫入csv標題頭內容
    csv_writerr.writerow(['電影', '評分', "詳情頁"])
    #寫入數據
    csv_writer.writerow([id, rate, urll])

7、圖片地址進行請求。定義圖片名稱,保存文檔。

    html2 = requests.get(url=urll, headers=self.headers).content
    dirname = "./圖/" + id + ".jpg"
    with open(dirname, 'wb') as f:
        f.write(html2)
        print("%s 【下載成功!!!!】" % id)

8、調用方法,實現功能。

   html = self.get_page(url)
   self.parse_page(html)

9、項目優化:

1)設置時間延時。
 time.sleep(1.4)

2)定義一個變量u, for遍歷,表示爬取的是第幾頁。(更清晰可觀)。

 u = 0
 self.u += 1;

【六、效果展示】

1、點擊綠色小三角運行輸入起始頁,終止頁(  從0頁開始 )。

    

2、將下載成功信息顯示在控制檯。

3、保存csv文檔。

4、電影圖片展示。

【七、總結】

    1、不建議抓取太多數據,容易對服務器造成負載,淺嘗輒止即可。

    2、本文章就Python爬取豆瓣網,在應用中出現的難點和重點,以及如何防止反爬,做出了相對於的解決方案。

    3、希望通過這個項目,能夠幫助瞭解json解析頁面的基本流程,字符串是如何拼接,format函數如何運用。

    4、本文基於Python網絡爬蟲,利用爬蟲庫,實現豆瓣電影及其圖片的獲取。實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,纔可以理解的更加深刻。

    5、需要本文源碼的小夥伴,請在下方公衆號後臺回覆“豆瓣電影四個字,即可獲取。

看完本文有收穫?請轉發分享給更多的人

IT共享之家

入羣請在微信後臺回覆【入羣】

------------------- End -------------------

往期精彩文章推薦:

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