Python異步爬蟲requests和aiohttp中代理IP的使用
爬蟲要想爬的好,IP代理少不了。?,F(xiàn)在網(wǎng)站基本都有些反爬措施,訪問(wèn)速度稍微快點(diǎn),就會(huì)發(fā)現(xiàn)IP被封,不然就是提交驗(yàn)證。下面就兩種常用的模塊來(lái)講一下代理IP的使用方式。話不多說(shuō),直接開始。
requests中代理IP的使用:
requests
中使用代理IP只需要添加一個(gè)proxies
參數(shù)即可。proxies
的參數(shù)值是一個(gè)字典,key
是代理協(xié)議(http/https),value
就是ip和端口號(hào),具體格式如下。
try: response = requests.get('https://httpbin.org/ip', headers=headers, proxies={'https':'https://221.122.91.74:9401'}, timeout=6) print('success') # 檢測(cè)代理IP是否使用成功 # 第一種方式,返回發(fā)送請(qǐng)求的IP地址,使用時(shí)要在 get() 添加 stream = True # print(response.raw._connection.sock.getpeername()[0]) # 第二種方式,直接返回測(cè)試網(wǎng)站的響應(yīng)數(shù)據(jù)的內(nèi)容 print(response.text) except Exception as e: print('error',e)
注意: peoxies
的key
值(http/https
)要和url
一致,不然會(huì)直接使用本機(jī)IP直接訪問(wèn)。
aiohttp中代理IP的使用:
由于requests
模塊不支持異步,迫不得已使用aiohttp
,掉了不少坑。
它的使用方式和requests
相似,也是在get()
方法中添加一個(gè)參數(shù),但此時(shí)的參數(shù)名為proxy
,參數(shù)值是字符串,且字符串中的代理協(xié)議,只支持http
,寫成https
會(huì)報(bào)錯(cuò)。
這里記錄一下我的糾錯(cuò)歷程。。
首先根據(jù)網(wǎng)上的使用方式,我先試了一下下面的代碼。
async def func(): async with aiohttp.ClientSession() as session: try: async with session.get("https://httpbin.org/ip", headers=headers, proxy='http://183.220.145.3:80', timeout=6) as response: page_text = await response.text() print('success') print(page_text) except Exception as e: print(e) print('error') if __name__=='__main__': asyncio.run(func())
修改后,再來(lái)
async def func(): con = aiohttp.TCPConnector(verify_ssl=False) async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(verify_ssl=False)) as session: try: async with session.get("https://httpbin.org/ip", headers=headers, proxy='http://183.220.145.3:80', timeout=6) as response: # print(response.raw._connection.sock.getpeername()[0]) page_text = await response.text() print(page_text) print('success') except Exception as e: print(e) print('error')
非但沒(méi)有解決反倒多了一個(gè)警告,好在改一下就好。額~懶得粘了,直接來(lái)最終版本吧。。
# 修改事件循環(huán)的策略,不能放在協(xié)程函數(shù)內(nèi)部,這條語(yǔ)句要先執(zhí)行 asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) async def func(): # 添加trust_env=True async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False), trust_env=True) as session: try: async with session.get("https://httpbin.org/ip", headers=headers, proxy='http://183.220.145.3:80', timeout=10) as response: page_text = await response.text() print(page_text) print('success') except Exception as e: print(e) print('error')
雖然糾錯(cuò)過(guò)程有點(diǎn)長(zhǎng),但好在知道怎么用了。
到此這篇關(guān)于Python異步爬蟲requests和aiohttp中代理IP的使用的文章就介紹到這了,更多相關(guān)requests和aiohttp中代理IP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文教你掌握Python中Lambda表達(dá)式的5種實(shí)用技巧
在Python編程的宇宙里,有一個(gè)強(qiáng)大而靈活的工具經(jīng)常被高效的程序員所利用——那就是Lambda表達(dá)式,下面就讓我們深入了解Lambda表達(dá)式的妙用吧2024-01-01Python列表reverse()函數(shù)使用方法詳解
這篇文章主要詳細(xì)介紹了Python列表reverse()函數(shù)使用方法,文章通過(guò)代碼示例講解的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-07-07Opencv實(shí)現(xiàn)計(jì)算兩條直線或線段角度方法詳解
這篇文章主要介紹了Opencv實(shí)現(xiàn)計(jì)算兩條直線或線段角度方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12詳解Python自帶的日期日歷處理calendar庫(kù)的使用
在?Python?開發(fā)中,我們經(jīng)常需要處理日期和時(shí)間,雖然?datetime?庫(kù)是最常用的選擇,但其實(shí)?Python?標(biāo)準(zhǔn)庫(kù)中的?calendar?模塊也是一個(gè)強(qiáng)大的工具,下面我們就來(lái)看看它的具體使用吧2024-12-12基于Python制作一個(gè)多進(jìn)制轉(zhuǎn)換工具
這篇文章主要介紹了如何利用Python制作一個(gè)多進(jìn)制轉(zhuǎn)換工具,可以實(shí)現(xiàn)2進(jìn)制、4進(jìn)制、8進(jìn)制、10進(jìn)制、16進(jìn)制、32進(jìn)制直接的互轉(zhuǎn),需要的可以參考一下2022-02-02Python使用python-can實(shí)現(xiàn)合并BLF文件
python-can庫(kù)是 Python 生態(tài)中專注于 CAN 總線通信與數(shù)據(jù)處理的強(qiáng)大工具,本文將使用python-can為 BLF 文件合并提供高效靈活的解決方案,有需要的小伙伴可以了解下2025-07-07