1. 程式人生 > 其它 >004爬蟲之獲取豆瓣TOP250電影資料

004爬蟲之獲取豆瓣TOP250電影資料

今天我們繼續通過正則表示式解析頁面原始碼,獲取的網頁為豆瓣TOP250,具體網址為:https://movie.douban.com/top250

今天的主要思路:

1、獲取網頁原始碼;
2、通過正則表示式解析網頁的資訊;
3、將獲取的內容存到本地檔案中。

網頁的資訊截圖:

經過爬取後的資料結果截圖:

下面是詳細的程式碼,裡面有相關的註釋,裡面有幾個關鍵的知識點大家可以細細的揣摩一下,比如:for迴圈,open()、f.write()、re.compile()、re.finditer()、re.S。下面是詳細的程式碼,有什麼不懂的可以直接在下面留言。最後建議大家自己敲的時候不要一次性全部敲完,按照上面三步一步一步編寫:

# 豆瓣TOP250資料抓取
# 1、抓取豆瓣TOP250電影資訊,拿到頁面原始碼
# 2、通過re解析提取資料
# 3、儲存解析的資料
import requests
import re

f = open("TOP250.cvs", mode="w", encoding="utf-8")

for num in range(0, 250, 25): # 迴圈獲取訪問地址
    url = f"https://movie.douban.com/top250?start={num}&filter="
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
    }

    resp = requests.get(url, headers=headers)
    resp.encoding = "utf-8"
    pageSource = resp.text

    # 編寫正則表示式
    # re.S可以讓正則中的.匹配換行符
    obj = re.compile(r'<div class="item">.*?<span class="title">(?P<moviename>.*?)</span>'
                     r'.*?導演: (?P<actor>.*?)&nbsp;.*?'
                     r'<br>(?P<year>.*?)&nbsp;'
                     r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
                     r'.*?<span>(?P<num>.*?)人評價</span>', re.S)

    # 進行正則表示式
    result = obj.finditer(pageSource);
    for item in result:
        moviename = item.group("moviename")
        actor = item.group("actor")
        year = item.group("year").strip() # 去掉字串兩端的空白
        score = item.group("score")
        num = item.group("num")
        # 將獲取的資料存取csv檔案中
        f.write(f"{moviename},{actor},{year},{score},{num}\n")

print("豆瓣TOP250提取完畢!")
f.close() # 關閉檔案
resp.close() # 關閉響應