005爬蟲之獲取電影天堂必看熱片電影的下載地址
阿新 • • 發佈:2022-12-04
今天還是繼續用正則表示式提取電影天堂電影的下載地址,這裡有一點不同的是需要先獲取主頁面的原始碼,然後通過解析主頁原始碼再獲取子頁面的原始碼,最後通過解析子頁面的原始碼獲取電影的下載地址。
還是按照思路編寫:
1.提取到主頁面中的每一個電影的背後的那個url地址
1.1 拿到“2022必看熱片”那一部分的HTML程式碼
1.2 從剛才拿到的HTML程式碼中提取到href的值
2.訪問子頁面,提取電影的名稱及下載地址
2.1 拿到子頁面的頁面原始碼
2.2 資料提取
網頁的資訊截圖:
經過爬取後資料的結果:
下面是詳細的程式碼,裡面有相關的註釋,裡面有幾個關鍵的知識點大家可以細細的揣摩一下,比如:urljoin,obj.search()。下面是詳細的程式碼,有什麼不懂的可以直接在下面留言。最後建議大家自己敲的時候不要一次性全部敲完,每編寫一步進行驗證:
""" 1.提取到主頁面中的每一個電影的背後的那個url地址 1.1 拿到“2022必看熱片”那一部分的HTML程式碼 1.2 從剛才拿到的HTML程式碼中提取到href的值 2.訪問子頁面,提取電影的名稱及下載地址 2.1 拿到子頁面的頁面原始碼 2.2 資料提取 """ import requests import re from urllib.parse import urljoin # 進行url拼接 url = "https://www.dy2018.com/" 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 = "gbk" pageSource = resp.text # 1,拿到“2022必看熱片”那一部分的HTML程式碼 obj = re.compile(r'2022必看熱片.*?<ul>(?P<html>.*?)</ul>', re.S) html = obj.search(pageSource) source2 = html.group("html") # 2. 提取a標籤中href的值 obj1 = re.compile(r"href='(?P<href>.*?)' title=.*?《(?P<moviename>.*?)》") result1 = obj1.finditer(source2) # 3.獲取電影完整的下載連結 obj2 = re.compile(r'<div id="downlist" style="display:none">.*?<a href="(?P<href1>.*?)">', re.S) for item in result1: moviename = item.group("moviename") # 獲取下載頁面的訪問頁面,這裡拼接網頁可以使用urljoin,也可以使用直接拼接,這裡推薦用urljoin child_url = urljoin(url, item.group("href")) # child_url = url.strip("/") + item.group("href") # 也可以進行拼接 # print(moviename, child_url) child_resp = requests.get(child_url) child_resp.encoding = "gbk" # 獲取子頁面的原始碼 pageSource1 = child_resp.text # 獲取子頁面中電影的下載地址 result2 = obj2.search(pageSource1) href1 = result2.group("href1") print(moviename, href1)