python更換代理爬取豆瓣電影數據

源碼在https://github.com/Lotus-Blue/Python-crawls-douban-data-through-proxy-ipgit

爬蟲最怕是被封ip,我相信不少爬蟲新手都會傻傻地拿本身的ip用戶爬取數據(順序1的文件),前幾回可能成功,但過了這個時間後,你會發現請求拋出403狀態碼,這是由於你的請求頻率過高了,系統會認爲你在爬蟲,暫時把你的ip封了。github

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

  1. 假裝請求報頭(request header)
  2. 減輕訪問頻率,速度
  3. 使用代理IP

通常辦法1做用不大,辦法2的話又致使耗時太大,因此辦法3是又省時又奏效的好辦法json

一、首先咱們國內高匿代理IP 得到代理IP數據

在這裏插入圖片描述
這麼多 ip夠你用的了,可是也不能任性,仍是儘可能不要同時運行多個爬蟲程序

運行文件2以後,你會獲得一個下面這樣的文件 bash

在這裏插入圖片描述

二、檢驗這些ip是否可用,經本人測試,通常都是狀態碼200,因此這步你忽略也不要緊

在這裏插入圖片描述

三、智能更換代理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))
複製代碼
四、檢驗經過該代理,請求是否成功
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,準備看網站的真實請求地址 dom

在這裏插入圖片描述
經過chrome的「檢查」觀察發現真實的URL爲

movie.douban.com/j/new_searc…工具

sort:按熱度排序爲T、按時間排序爲R、按評分排序爲S tags:類型 countries:地區 geners:形式(電影、電視劇…) start:「加載更多」 測試

在這裏插入圖片描述
對於爬蟲,這種 json數據是很好的

==總之先看下真實請求接口有沒有好東西,沒有的話再爬取網站源碼數據==網站

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息