1. 程式人生 > 其它 >005爬蟲之獲取電影天堂必看熱片電影的下載地址

005爬蟲之獲取電影天堂必看熱片電影的下載地址

今天還是繼續用正則表示式提取電影天堂電影的下載地址,這裡有一點不同的是需要先獲取主頁面的原始碼,然後通過解析主頁原始碼再獲取子頁面的原始碼,最後通過解析子頁面的原始碼獲取電影的下載地址。
還是按照思路編寫:

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)