python爬虫ip_python爬虫数据采集ip被封一篇解决
代理服務(wù)的介紹:
我們?cè)谧雠老x(chóng)的過(guò)程中經(jīng)常最初爬蟲(chóng)都正常運(yùn)行,正常爬取數(shù)據(jù),一切看起來(lái)都是美好,然而一杯茶的功夫就出現(xiàn)了錯(cuò)誤。
如:403 Forbidden錯(cuò)誤,“您的IP訪問(wèn)頻率太高”錯(cuò)誤,或者跳出一個(gè)驗(yàn)證碼讓我們輸入,之后解封,但過(guò)一會(huì)又出現(xiàn)類似情況。
出現(xiàn)這個(gè)現(xiàn)象的原因是因?yàn)榫W(wǎng)站采取了一些反爬中措施,如:服務(wù)器檢測(cè)IP在單位時(shí)間內(nèi)請(qǐng)求次數(shù)超過(guò)某個(gè)閥值導(dǎo)致,稱為封IP。
為了解決此類問(wèn)題,代理就派上了用場(chǎng),如:代理軟件、付費(fèi)代理、ADSL撥號(hào)代理,以幫助爬蟲(chóng)脫離封IP的苦海。
測(cè)試HTTP請(qǐng)求及響應(yīng)的網(wǎng)站:http://httpbin.org/
GET地址 :http://httpbin.org/get
POST地址:http://httpbin.org/post
httpbin這個(gè)網(wǎng)站能測(cè)試 HTTP 請(qǐng)求和響應(yīng)的各種信息,比如 cookie、ip、headers 和登錄驗(yàn)證等.
且支持 GET、POST 等多種方法,對(duì) web 開(kāi)發(fā)和測(cè)試很有幫助。
代理的設(shè)置:
① urllib的代理設(shè)置
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener?proxy = '127.0.0.1:8888'#需要認(rèn)證的代理#proxy = 'username:password@127.0.0.1:8888'?#使用ProxyHandler設(shè)置代理proxy_handler = ProxyHandler({ 'http': 'http://' + proxy, 'https': 'https://' + proxy})#傳入?yún)?shù)創(chuàng)建Opener對(duì)象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的代理設(shè)置
import requests
?proxy= '127.0.0.1:8888'#需要認(rèn)證的代理#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
fromselenium import webdriver
?service_args= [ '--proxy=127.0.0.1:9743', '--proxy-type=http', #'--proxy-auth=username:password' #帶認(rèn)證代理]?browser = webdriver.PhantomJS(service_args=service_args)browser.get('http://httpbin.org/get')print(browser.page_source)
使用的是Chromefromselenium 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' ...
免費(fèi)代理IP的使用
我們可以從互聯(lián)網(wǎng)中獲取免費(fèi)的代理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',]?# 隨機(jī)選擇一個(gè)代理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)
收費(fèi)代理IP的使用
收費(fèi)代理還是很多的如:
芝麻代理
極光代理
太陽(yáng)代理
在requests中使用收費(fèi)代理
import requests
?# 從代理服務(wù)中獲取一個(gè)代理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)
總結(jié)
以上是生活随笔為你收集整理的python爬虫ip_python爬虫数据采集ip被封一篇解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HTTP的幂等性
- 下一篇: python代理IP的使用