Python爬蟲(chóng)簡(jiǎn)單運(yùn)用爬取代理IP的實(shí)現(xiàn)
功能1: 爬取西拉ip代理官網(wǎng)上的代理ip
環(huán)境:python3.8+pycharm
庫(kù):requests,lxml
瀏覽器:谷歌
IP地址:http://www.xiladaili.com/gaoni/
分析網(wǎng)頁(yè)源碼:
選中div元素后右鍵找到Copy再深入子菜單找到Copy Xpath點(diǎn)擊一下就復(fù)制到XPath
我們復(fù)制下來(lái)的Xpth內(nèi)容為:/html/body/div/div[3]/div[2]/table/tbody/tr[50]/td[1]
雖然可以查出來(lái)ip,但不利于程序自動(dòng)爬取所有IP,利用谷歌XpathHelp測(cè)試一下
從上圖可以看出,只匹配到了一個(gè)Ip,我們稍作修改,即可達(dá)到目的
,有關(guān)xpath規(guī)則,可以參考下表;
經(jīng)過(guò)上面的規(guī)則學(xué)習(xí)后,我們修改為://*[@class=‘mt-0 mb-2 table-responsive']/table/tbody/tr/td[1],再利用xpthhelp工具驗(yàn)證一下:
這樣我們就可以爬取整個(gè)頁(yè)面的Ip地址了,為了方便爬取更多的IP,我們繼續(xù)往下翻頁(yè),找到翻頁(yè)按鈕:
找規(guī)律,發(fā)現(xiàn)每翻一頁(yè),a標(biāo)簽下的href連接地址加1即可,python程序可以利用for循環(huán)解決翻頁(yè)問(wèn)題即可。
為了提高IP代理的質(zhì)量,我們爬取評(píng)分高的IP來(lái)使用。找到評(píng)分欄下的Xpath路徑,這里不再做詳細(xì)介紹,思路參考上面找IP地址的思路,及XPath規(guī)則,過(guò)程參考下圖:
Python代碼實(shí)現(xiàn)
代碼可復(fù)制粘貼直接使用,如果出現(xiàn)報(bào)錯(cuò),修改一下cookie。這里使用代理ip爬取,防止IP被封。當(dāng)然這里的代碼還是基礎(chǔ)的,有空可以寫(xiě)成代理池,多任務(wù)去爬。當(dāng)然還可以使用其它思路去實(shí)現(xiàn),這里只做入門(mén)介紹。當(dāng)有了這些代理IP后,我們可以用文件保存,或者保存到數(shù)據(jù)庫(kù)中,根據(jù)實(shí)際使用情況而定,這里不做保存,只放到列表變量中保存。
import requests from lxml import etree import time class XiLaIp_Spider: def __init__(self): self.url = 'http://www.xiladaili.com/gaoni/' self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', 'cookie': 'td_cookie=1539882751; csrftoken=lymOXQp49maLMeKXS1byEMMmsavQPtOCOUwy6WIbfMNazZW80xKKA8RW2Zuo6ssy; Hm_lvt_31dfac66a938040b9bf68ee2294f9fa9=1592547159; Hm_lvt_9bfa8deaeafc6083c5e4683d7892f23d=1592535959,1592539254,1592612217; Hm_lpvt_9bfa8deaeafc6083c5e4683d7892f23d=1592612332', } self.proxy = '116.196.85.150:3128' self.proxies = { "http": "http://%(proxy)s/" % {'proxy': self.proxy}, "https": "http://%(proxy)s/" % {'proxy': self.proxy} } self.list1 = [] def get_url(self): file = open('Ip_Proxy.txt', 'a', encoding='utf-8') ok_file = open('OkIp_Proxy.txt', 'a', encoding='utf-8') for index in range(50): time.sleep(3) try: res = requests.get(url=self.url if index == 0 else self.url + str(index) + "/", headers=self.headers, proxies=self.proxies, timeout=10).text except: continue data = etree.HTML(res).xpath("http://*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[1]") # '//*[@id="scroll"]/table/tbody/tr/td[1]' score_data = etree.HTML(res).xpath("http://*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[8]") for i, j in zip(data, score_data): # file.write(i.text + '\n') score = int(j.text) # 追加評(píng)分率大于十萬(wàn)的ip if score > 100000: self.list1.append(i.text) set(self.list1) file.close() ok_ip = [] for i in self.list1: try: # 驗(yàn)證代理ip是否有效 res = requests.get(url='https://www.baidu.com', headers=self.headers, proxies={'http': 'http://' + i}, timeout=10) if res.status_code == 200: # ok_file.write(i + '\n') ok_ip.append(i) except: continue ok_file.close() return ok_ip def run(self): return self.get_url() dl = XiLaIp_Spider() dl.run()
到此這篇關(guān)于Python爬蟲(chóng)簡(jiǎn)單運(yùn)用爬取代理IP的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 爬取代理IP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何基于opencv實(shí)現(xiàn)簡(jiǎn)單的數(shù)字識(shí)別
現(xiàn)在很多場(chǎng)景需要使用的數(shù)字識(shí)別,比如銀行卡識(shí)別,以及車(chē)牌識(shí)別等,在AI領(lǐng)域有很多圖像識(shí)別算法,大多是居于opencv 或者谷歌開(kāi)源的tesseract 識(shí)別,下面這篇文章主要給大家介紹了關(guān)于如何基于opencv實(shí)現(xiàn)簡(jiǎn)單的數(shù)字識(shí)別,需要的朋友可以參考下2021-09-09python如何發(fā)送xml格式請(qǐng)求數(shù)據(jù)
這篇文章主要介紹了python如何發(fā)送xml格式請(qǐng)求數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Python-基礎(chǔ)-入門(mén) 簡(jiǎn)介
這篇文章主要介紹了Python-基礎(chǔ)-簡(jiǎn)介入門(mén)的相關(guān)資料,需要的朋友可以參考下2014-08-08通過(guò)Python讀取照片的Exif信息解鎖圖片背后的故事
這篇文章主要為大家介紹了通過(guò)Python讀取照片的Exif信息解鎖圖片背后的故事探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12在 Python 中如何使用 Re 模塊的正則表達(dá)式通配符
這篇文章主要介紹了在 Python 中如何使用 Re 模塊的正則表達(dá)式通配符,本文詳細(xì)解釋了如何在 Python 中使用帶有通配符的 re.sub() 來(lái)匹配字符串與正則表達(dá)式,需要的朋友可以參考下2023-06-06Python 中的參數(shù)傳遞、返回值、淺拷貝、深拷貝
這篇文章主要介紹了Python 中的參數(shù)傳遞、返回值、淺拷貝、深拷貝,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06