004爬蟲之獲取豆瓣TOP250電影資料
阿新 • • 發佈:2022-12-04
今天我們繼續通過正則表示式解析頁面原始碼,獲取的網頁為豆瓣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>.*?) .*?' r'<br>(?P<year>.*?) ' 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() # 關閉響應