python爬蟲數據采集ip被封一篇解決


代理服務的介紹:
我們在做爬蟲的過程中經常最初爬蟲都正常運行,正常爬取數據,一切看起來都是美好,然而一杯茶的功夫就出現了錯誤。
如:403 Forbidden錯誤,“您的IP訪問頻率太高”錯誤,或者跳出一個驗證碼讓我們輸入,之后解封,但過一會又出現類似情況。
出現這個現象的原因是因為網站采取了一些反爬中措施,如:服務器檢測IP在單位時間內請求次數超過某個閥值導致,稱為封IP。
為了解決此類問題,代理就派上了用場,如:代理軟件、付費代理、ADSL撥號代理,以幫助爬蟲脫離封IP的苦海。
測試HTTP請求及響應的網站:http://httpbin.org/
GET地址 :http://httpbin.org/get
POST地址:http://httpbin.org/post
httpbin這個網站能測試 HTTP 請求和響應的各種信息,比如 cookie、ip、headers 和登錄驗證等.
且支持 GET、POST 等多種方法,對 web 開發和測試很有幫助。
代理的設置:
① urllib的代理設置
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener​proxy = '127.0.0.1:8888'#需要認證的代理#proxy = 'username:password@127.0.0.1:8888'​#使用ProxyHandler設置代理proxy_handler = ProxyHandler({ 'http': 'http://' + proxy, 'https': 'https://' + proxy})#傳入參數創建Opener對象opener = build_opener(proxy_handler)try: response = opener.open('http://httpbin.org/get') print(response.read().decode('utf-8'))except URLError as e: print(e.reason)

  

② requests的代理設置
import requests
​proxy = '127.0.0.1:8888'#需要認證的代理#proxy = 'username:password@127.0.0.1:8888'​proxies = { 'http': 'http://' + proxy, 'https': 'https://' + proxy,}try: response = requests.get('http://httpbin.org/get', proxies=proxies) print(response.text)except requests.exceptions.ConnectionError as e: print('Error', e.args)

 

③ Selenium的代理使用
使用的是PhantomJS
from selenium import webdriver
​service_args = [ '--proxy=127.0.0.1:9743', '--proxy-type=http', #'--proxy-auth=username:password' #帶認證代理]​browser = webdriver.PhantomJS(service_args=service_args)browser.get('http://httpbin.org/get')print(browser.page_source)
使用的是Chrome
from selenium import webdriver
​proxy = '127.0.0.1:9743'chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--proxy-server=http://' + proxy)chrome = webdriver.Chrome(chrome_options=chrome_options)chrome.get('http://httpbin.org/get')

 

④ 在Scrapy使用代理
#在Scrapy的Downloader Middleware中間件里
... def process_request(self, request, spider): request.meta['proxy'] = 'http://127.0.0.1:9743' ...

免費代理IP的使用

我們可以從互聯網中獲取免費的代理IP:
import requests,random
​#定義代理池proxy_list = [ '182.39.6.245:38634', '115.210.181.31:34301', '123.161.152.38:23201', '222.85.5.187:26675', '123.161.152.31:23127',]​# 隨機選擇一個代理proxy = random.choice(proxy_list)​proxies = { 'http': 'http://' + proxy, 'https': 'https://' + proxy,}try: response = requests.get('http://httpbin.org/get', proxies=proxies) print(response.text)except requests.exceptions.ConnectionError as e: print('Error', e.args)

 

收費代理IP的使用
收費代理還是很多的如:
芝麻代理
極光代理
太陽代理
在requests中使用收費代理
import requests
​# 從代理服務中獲取一個代理IPproxy = requests.get("http://tvp.daxiangdaili.com/ip/?tid=559775358931681&num=1").textproxies = { 'http': 'http://' + proxy, 'https': 'https://' + proxy,}try: response = requests.get('http://httpbin.org/get', proxies=proxies) print(response.text)except requests.exceptions.ConnectionError as e: print('Error', e.args)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM