日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

requests 模块获取免费的代理并检测代理 IP 是否有效!

發(fā)布時(shí)間:2023/12/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 requests 模块获取免费的代理并检测代理 IP 是否有效! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 通過代理服務(wù)發(fā)送請(qǐng)求

在爬取網(wǎng)頁的過程中,經(jīng)常會(huì)出現(xiàn)不久前可以爬取的網(wǎng)頁現(xiàn)在無法爬取的情況,這是因?yàn)槟?IP 被爬取網(wǎng)站的服務(wù)器屏蔽了。此時(shí),代理服務(wù)可以為您解決這一麻煩,設(shè)置代理時(shí),首先需要找到代理地址,例如,58.220.95.80,對(duì)應(yīng)的端口號(hào)為 9401,完整的格式為 58.220.95.80:9401。代碼如下:

?

# -*- coding: UTF-8 -*- """ @author:AmoXiang @file:7.代理的應(yīng)用.py @time:2020/11/13 """import requests # 導(dǎo)入網(wǎng)絡(luò)請(qǐng)求模塊 from lxml import etree# 頭部信息 headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36" } proxies = {'http': 'http://58.220.95.80:9401','https': 'https://58.220.95.80:9401' # 設(shè)置代理IP與對(duì)應(yīng)的端口號(hào)} try:# 對(duì)需要爬取的網(wǎng)頁發(fā)送請(qǐng)求response = requests.get(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=ip%E5%9C%B0%E5%9D%80",headers=headers, proxies=proxies, timeout=3)print(response.status_code) # 打印響應(yīng)狀態(tài)碼response.encoding = "utf8" # 進(jìn)行編碼html = etree.HTML(response.text) # 解析HTMLinfo = html.xpath('//*[@id="1"]/div[1]/div[1]/div[2]/table//tr/td//text()')[1:]info = " ".join(info).replace("\xa0", "").strip().replace("本機(jī)IP:", "本機(jī)IP: ")print(info) # 輸出當(dāng)前IP匿名信息 except Exception as e:print(f"錯(cuò)誤異常信息為: {e}") # 打印異常信息

程序運(yùn)行結(jié)果如下圖所示:

由于示例中代理 IP 是免費(fèi)的,所以使用得時(shí)間不固定,超出使用的時(shí)間范圍該地址將失效。在地址失效或者地址錯(cuò)誤時(shí),控制臺(tái)將顯示以下所示的異常信息。

?

錯(cuò)誤異常信息為: HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: /s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=ip%E5%9C%B0%E5%9D%80(Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000299451C7F08>: Failed to establish a new connection: [WinError 10060] 由于連接方在一段時(shí)間后沒有正確答復(fù)或連接的主機(jī)沒有反應(yīng),連接嘗試失敗。')))

2. 獲取免費(fèi)的代理 IP

為了避免爬取目標(biāo)網(wǎng)頁的后臺(tái)服務(wù)器,對(duì)我們實(shí)施封鎖 IP 的操作。我們可以每發(fā)送一次網(wǎng)絡(luò)請(qǐng)求更換一個(gè) IP,從而降低被發(fā)現(xiàn)的風(fēng)險(xiǎn)。其實(shí)在獲取免費(fèi)的代理 IP 之前,需要先找到提供免費(fèi)代理 IP 的網(wǎng)頁,然后通過爬蟲技術(shù)將大量的代理 IP 提取并保存至文件當(dāng)中。以某免費(fèi)代理 IP 網(wǎng)頁為例,實(shí)現(xiàn)代碼如下:

?

# -*- coding: UTF-8 -*- """ @author:AmoXiang @file:5.獲取免費(fèi)的代理ip.py @time:2020/11/12 """import requests # 導(dǎo)入網(wǎng)絡(luò)請(qǐng)求模塊 from lxml import etree # 導(dǎo)入 HTML 解析模塊 import pandas as pd # 導(dǎo)入pandas模塊ip_list = [] # 創(chuàng)建保存IP地址的列表 # 頭部信息 headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"" (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36" }def get_ip(url, headers):"""用于獲取指定網(wǎng)站中的ip及端口:param url: 抓取網(wǎng)站的鏈接:param headers: 請(qǐng)求頭:return: None"""response = requests.get(url=url, headers=headers)response.encoding = "utf8" # 設(shè)置編碼方式if response.status_code == 200: # 判斷請(qǐng)求是否成功html = etree.HTML(response.text) # 解析HTML# 獲取所有帶有IP的li標(biāo)簽li_list = html.xpath('//div[@class="container"]/div[2]/ul/li')[1:]for li in li_list: # 遍歷每行內(nèi)容ip = li.xpath('./span[@class="f-address"]/text()')[0] # 獲取ipport = li.xpath('./span[@class="f-port"]/text()')[0] # 獲取端口ip_list.append(ip + ":" + port)print(f"代理ip為: {ip}, 對(duì)應(yīng)端口為: {port}")if __name__ == '__main__':ip_table = pd.DataFrame(columns=["ip"]) # 創(chuàng)建臨時(shí)表格for i in range(1, 5):# 構(gòu)造免費(fèi)代理IP的請(qǐng)求地址url = "https://www.dieniao.com/FreeProxy/{}.html".format(i)get_ip(url, headers)ip_table["ip"] = ip_list # 將提取的ip保存至excel文件中的ip列# 生成xlsx文件ip_table.to_excel("ip.xlsx", sheet_name="data")

程序代碼運(yùn)行后控制臺(tái)將顯示如下圖所示的代理 ip 與對(duì)應(yīng)端口,項(xiàng)目文件中將自動(dòng)生成 ip.xlsx 文件,文件內(nèi)容如下圖所示:

如果以上示例代碼運(yùn)行出錯(cuò),讀者可以參考以上示例代碼的學(xué)習(xí)思路,然后爬取其他免費(fèi)代理IP的網(wǎng)頁。博主這里提供幾個(gè)免費(fèi)的代理 IP 網(wǎng)站:

3. 檢測(cè)代理 IP 是否有效

提供免費(fèi)代理 IP 的網(wǎng)頁有很多,但是經(jīng)過測(cè)試會(huì)發(fā)現(xiàn)并不是所有的免費(fèi)代理 IP 都是有效的,甚至更不是匿名IP(即獲取遠(yuǎn)程訪問用戶的 IP 地址是代理服務(wù)器的 IP 地址,不是用戶本地真實(shí)的 IP 地址)。所以要使用我們爬取下來的免費(fèi)代理 IP,就需要對(duì)這個(gè) IP 進(jìn)行檢測(cè)。

實(shí)現(xiàn)檢測(cè)免費(fèi)代理 IP 是否可用時(shí),首先需要讀取保存免費(fèi)代理 IP 的文件,然后對(duì)代理 IP 進(jìn)行遍歷并使用免費(fèi)的代理 IP 發(fā)送網(wǎng)絡(luò)請(qǐng)求,而請(qǐng)求地址可以使用查詢 IP 位置的網(wǎng)頁。如果網(wǎng)絡(luò)請(qǐng)求成功說明免費(fèi)的代理 IP 可以使用,并且還會(huì)返回當(dāng)前免費(fèi)代理 IP 的匿名地址。代碼如下:

?

# -*- coding: UTF-8 -*- """ @author:AmoXiang @file:6.檢測(cè)代理ip是否有效.py @time:2020/11/12 """import requests # 導(dǎo)入網(wǎng)絡(luò)請(qǐng)求模塊 import pandas as pd # 導(dǎo)入pandas模塊 from lxml import etree # 導(dǎo)入HTML解析模塊ip_table = pd.read_excel("ip.xlsx") # 讀取代理IP文件內(nèi)容 ip_list = ip_table["ip"] # 獲取代理IP信息 # 頭部信息 headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36" } # 循環(huán)遍歷代理IP并通過代理發(fā)送網(wǎng)絡(luò)請(qǐng)求 for ip in ip_list:# 這里添加了http和https兩個(gè)代理,這樣寫是因?yàn)橛行┚W(wǎng)頁采用 http協(xié)議,有的則采用https協(xié)議,# 為了在這兩類網(wǎng)頁上都能順利使用代理,所以一般都同時(shí)寫上。當(dāng)然,如果確定了某網(wǎng)頁的請(qǐng)求類型,可以只寫一種proxies = {'http': 'http://{ip}'.format(ip=ip),'https': 'https://{ip}'.format(ip=ip)}try:response = requests.get("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=ip%E5%9C%B0%E5%9D%80",headers=headers, timeout=3, proxies=proxies)if response.status_code == 200: # 判斷是否請(qǐng)求成功,請(qǐng)求成功說明代理IP可用response.encoding = "utf8" # 進(jìn)行編碼html = etree.HTML(response.text) # 解析HTMLinfo = html.xpath('//*[@id="1"]/div[1]/div[1]/div[2]/table//tr/td//text()')[1:]info = " ".join(info).replace("\xa0", "").strip().replace("本機(jī)IP:", "本機(jī)IP: ")print(info) # 輸出當(dāng)前IP匿名信息except Exception as e:# print(e) # 打印異常信息pass

程序運(yùn)行結(jié)果如下圖所示:

由于博主網(wǎng)絡(luò)原因,故測(cè)試出來的可用的 IP 地址較少。讀者可以根據(jù)自己查找的(IP查詢)請(qǐng)求地址進(jìn)行更換測(cè)試。免費(fèi)的 IP 地址可用的較少,可以購買付費(fèi)代理。

近期有很多朋友通過私信咨詢有關(guān)Python學(xué)習(xí)問題。為便于交流,點(diǎn)擊藍(lán)色自己加入討論解答資源基地

?

總結(jié)

以上是生活随笔為你收集整理的requests 模块获取免费的代理并检测代理 IP 是否有效!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。