與全地球廣大單身汪一樣,電影中單純而美好的愛情總是讓人陷入美好無瑕的幻想。
代碼已上傳至個人GitHub,可供查看:獲取豆瓣電影愛情片榜單封面圖片
爬蟲:獲取豆瓣電影愛情片榜單封面圖片
目的:獲取豆瓣電影愛情片榜單封面圖片,並保存到本地。
思路:
1、分析網頁URL,查看規律
2、敲代碼(圖片名設置爲該電影名稱)
一、打開豆瓣電影分類排行榜-愛情片,F12審查元素
在向下滑動的過程中,發現如下規律,每過20張圖片就出現一個url,查看URL,就可以發現一些馬腳
通過對網頁和URL的分析,可以得出以下結論:
- 每過20張圖片就出現一個URL,即翻頁,所以每頁的圖片數量爲20張,這在URL中也有體現:limit=20;
- URL中的start=xx表示該頁是從第幾張開始的;
- URL中的interval_id=100%3A90表示的是評價在前10%的電影;
- URL中的type=13表示的是電影類型的代號,13指的是愛情片;
- 在以上條件的限制下,滿足要求的電影數量爲351部。
二、上代碼,爲了防止IP被封,我使用了一些代理,並隨機設置了睡眠時間,能夠更有效的獲取數據
from urllib import request
import json
import time
import random
class douban_love_moives():
def __init__(self, k):
self.k = k
def load_moive(self, start):
url = 'https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=' + str(
start) + '&limit=20'
time.sleep(random.randint(1, 4))
rsp = request.urlopen(url)
json_data = json.loads(rsp.read().decode())
for moive in json_data:
self.k += 1
time.sleep(random.randint(2, 5))
try:
request.urlretrieve(moive['cover_url'], 'F:\文件存放處\愛情片電影封面\\' + moive['title'] + '.jpg')
print('第' + str(self.k) + '張圖片下載成功:' + moive['cover_url'])
except Exception:
print('第' + str(self.k) + '張圖片下載失敗:' + moive['cover_url'])
def get_moives(self):
for start in range(0, 351, 20):
# 使用代理步驟
# - 1、設置代理地址
proxys = [{'http': '39.137.69.10:8080'},
{'http': '60.255.186.169:8888'},
{'http': '117.191.11.108:80'}]
# - 2、創建ProxyHandler
proxy = random.choice(proxys)
proxy_handler = request.ProxyHandler(proxy)
# - 3、創建Opener
opener = request.build_opener(proxy_handler)
# - 4、導入Opener
request.install_opener(opener)
self.load_moive(self.k)
if __name__ == '__main__':
print('開始下載圖片......')
moive = douban_love_moives(k=0)
moive.get_moives()
運行結果:
代碼已上傳至個人GitHub,可供查看:獲取豆瓣電影愛情片榜單封面圖片