原始碼在https://github.com/Lotus-Blue/Python-crawls-douban-data-through-proxy-ip
爬蟲最怕是被封ip
,我相信很多爬蟲新手都會傻傻地拿自己的ip
使用者爬取資料(順序1的檔案),前幾次可能成功,但過了這個時間後,你會發現請求丟擲403
狀態碼,這是因為你的請求頻率太高了,系統會認為你在爬蟲,暫時把你的ip
封了。
那如何解決這個問題呢?主要有下面三種辦法
- 偽裝請求報頭(request header)
- 減輕訪問頻率,速度
- 使用代理IP
一般辦法1作用不大,辦法2的話又導致耗時太大,所以辦法3是又省時又奏效的好辦法
1、首先我們國內高匿代理IP 獲得代理IP資料
這麼多ip
夠你用的了,但是也不能任性,還是儘量不要同時執行多個爬蟲程式
執行檔案2之後,你會得到一個下面這樣的檔案
2、檢驗這些ip
是否可用,經本人測試,一般都是狀態碼200
,所以這步你忽略也沒關係
3、智慧更換代理ip
(但沒有檢驗通過該代理,請求是否成功)
def change_proxy(proxies):
proxy=random.choice(proxies)
if proxy==None:
proxy_support=urllib.request.ProxyHandler({})
else:
proxy_support = urllib.request.ProxyHandler({"http": proxy})
opener = urllib.request.build_opener(proxy_support)
opener.addheaders=[("User-Agent",headers["User-Agent"])]
urllib.request.install_opener(opener)
print('智慧切換代理:%s' % ('本機' if proxy == None else proxy))
複製程式碼
4、檢驗通過該代理,請求是否成功
respones = requests.get(url, headers=headers, proxies=random.choice(proxys))
while respones.status_code!=200:
respones = requests.get(url, headers=headers, proxies=random.choice(proxys))
複製程式碼
獲取get介面
開啟chrome的“檢查”工具->切換到network介面->選擇XHR
,準備看網站的真實請求地址
sort
:按熱度排序為T、按時間排序為R、按評分排序為S
tags
:型別
countries
:地區
geners
:形式(電影、電視劇…)
start
:“載入更多”
json
資料是很好的
==總之先看下真實請求介面有沒有好東西,沒有的話再爬取網站原始碼資料==