正則抓取貓眼TOP100電影的海報
阿新 • • 發佈:2019-02-19
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的電影海報成功完成。
參考: