1. 程式人生 > >正則抓取貓眼TOP100電影的海報

正則抓取貓眼TOP100電影的海報

1,開啟貓眼電影TOP100的榜單網址:

2,Google Chrome 瀏覽器中按F12,開啟開發者面板,使用Network:

此時什麼也沒有。

3,回到榜單的原始頁面,按下F5進行重新整理,此時再看開發者面板中的Network中會有資訊流:

通過查詢看到每條電影的相關資訊均在一個<dd></dd>中,上圖中標明瞭電影海報超連結的位置和電影名稱的位置。

可以用正則表示式提取出相關的資訊。

4,電影Top100總共有10頁,每頁10條,每頁的網址有規律:

第1,2,3,...10頁的網址
http://maoyan.com/board/4?offset=0
http://maoyan.com/board/4?offset=10
http://maoyan.com/board/4?offset=20
...
http://maoyan.com/board/4?offset=90

offset=後面的數字0、10、20、。。。90分別對應第1,2,3,。。。10頁。

因此,外層迴圈控制頁數,內層迴圈控制每頁中電影的網址,可完成對每個電影的海報進行下載。

5,程式碼:

# 貓眼電影的TOP100電影海報下載
# 第1,2,3,...10頁的網址
# http://maoyan.com/board/4?offset=0
# http://maoyan.com/board/4?offset=10
# http://maoyan.com/board/4?offset=20
# ...
# http://maoyan.com/board/4?offset=90
import requests
import re
import random
import time
import os


def doanload_onepage(offset):
    url = 'http://maoyan.com/board/4?offset=' + str(offset)
    headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
            }
    response = requests.get(url, headers=headers)
    html = response.text
#   print(html)

    pattern = re.compile('<dd>.*?data-src="(.*?)".*?"name"><a.*?>(.*?)</a>.*?</dd>', re.S)    # 提取電影的海報連結和名稱
    movies = re.findall(pattern, html)
    print(movies)
    print(type(movies))
    file_path = r'F:\MaoYaoTop100Movies'
    if not os.path.exists(file_path):
        os.makedirs(file_path)    # 如果儲存路徑不存在,則進行建立
    os.chdir(file_path)           # 改變儲存路徑到F:\MaoYaoTop100Movies
    for item in movies:
        href = item[0]
        name = item[1]
        print(href)
        print(name)
        response = requests.get(url=href, headers=headers)
        content = response.content
        picture_name = name + '.jpg'
        with open(picture_name, 'wb') as f:
            f.write(content)
        time.sleep(random.random() * 3)
    print('第{}頁下載完畢.'.format(int(offset/10+1)))
    time.sleep(random.random() * 9)


if __name__ == '__main__':
    pages = 10    # 總共10頁
    for i in range(pages):
        doanload_onepage(offset=i * 10)
    print('====Top100電影海報下載完畢====')

過程:

下載的目錄檔案:

至此,利用正則表示式下載貓眼Top100的電影海報成功完成。

參考: