python更換代理爬取豆瓣電影資料

Lotus-Blue發表於2019-08-03

原始碼在https://github.com/Lotus-Blue/Python-crawls-douban-data-through-proxy-ip

爬蟲最怕是被封ip,我相信很多爬蟲新手都會傻傻地拿自己的ip使用者爬取資料(順序1的檔案),前幾次可能成功,但過了這個時間後,你會發現請求丟擲403狀態碼,這是因為你的請求頻率太高了,系統會認為你在爬蟲,暫時把你的ip封了。

那如何解決這個問題呢?主要有下面三種辦法

  1. 偽裝請求報頭(request header)
  2. 減輕訪問頻率,速度
  3. 使用代理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,準備看網站的真實請求地址

在這裡插入圖片描述
通過chrome的“檢查”觀察發現真實的URL為

movie.douban.com/j/new_searc…

sort:按熱度排序為T、按時間排序為R、按評分排序為S tags:型別 countries:地區 geners:形式(電影、電視劇…) start:“載入更多”

在這裡插入圖片描述
對於爬蟲,這種json資料是很好的

==總之先看下真實請求介面有沒有好東西,沒有的話再爬取網站原始碼資料==

相關文章