Python異步爬蟲requests和aiohttp中代理IP的使用

爬蟲要想爬的好,IP代理少不瞭。。現在網站基本都有些反爬措施,訪問速度稍微快點,就會發現IP被封,不然就是提交驗證。下面就兩種常用的模塊來講一下代理IP的使用方式。話不多說,直接開始。

requests中代理IP的使用:

requests中使用代理IP隻需要添加一個proxies參數即可。proxies的參數值是一個字典,key是代理協議(http/https),value就是ip和端口號,具體格式如下。

try:
    response = requests.get('https://httpbin.org/ip', headers=headers, 
    	proxies={'https':'https://221.122.91.74:9401'}, timeout=6)
    print('success')
    # 檢測代理IP是否使用成功
    # 第一種方式,返回發送請求的IP地址,使用時要在 get() 添加 stream = True
    # print(response.raw._connection.sock.getpeername()[0])
    # 第二種方式,直接返回測試網站的響應數據的內容
    print(response.text)
except Exception as e:
    print('error',e)

在這裡插入圖片描述

註意: peoxieskey值(http/https)要和url一致,不然會直接使用本機IP直接訪問。

aiohttp中代理IP的使用:

由於requests模塊不支持異步,迫不得已使用aiohttp,掉瞭不少坑。
它的使用方式和requests相似,也是在get()方法中添加一個參數,但此時的參數名為proxy,參數值是字符串,且字符串中的代理協議,隻支持http,寫成https會報錯。
這裡記錄一下我的糾錯歷程。。
首先根據網上的使用方式,我先試瞭一下下面的代碼。

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())

在這裡插入圖片描述

修改後,再來

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')

在這裡插入圖片描述

非但沒有解決反倒多瞭一個警告,好在改一下就好。額~懶得粘瞭,直接來最終版本吧。。

# 修改事件循環的策略,不能放在協程函數內部,這條語句要先執行
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')

在這裡插入圖片描述

雖然糾錯過程有點長,但好在知道怎麼用瞭。

 到此這篇關於Python異步爬蟲requests和aiohttp中代理IP的使用的文章就介紹到這瞭,更多相關requests和aiohttp中代理IP內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: