python爬蟲實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊
一、使用PyChram的正則
首先,小編講的不是爬取ip,而是講了解PyCharm的正則,這里講的正則不是Python的re模塊哈!
而是PyCharm的正則功能,我們?cè)赑yChram的界面上按上Ctrl+R,可以發(fā)現(xiàn),這里出現(xiàn)兩行輸入框
現(xiàn)在如果小編想把如下數(shù)據(jù)轉(zhuǎn)換成一個(gè)字典存儲(chǔ)
讀者也許會(huì)一個(gè)一去改,但是小編只需在上述的那兩個(gè)輸入框內(nèi),輸入一串字符串即可。
只需在第一個(gè)輸入框中,輸入(.*) : (.*)
在第二個(gè)輸入框中,輸入"$1":"$2",,看看效果如何
之后再給兩端分別一個(gè)花括號(hào)和取一個(gè)字典名稱即可。
二、制作一個(gè)隨機(jī)User-Agent模塊
反爬措施中,有這樣一條,就是服務(wù)器會(huì)檢查請(qǐng)求的user-agent參數(shù)值,如果檢查的結(jié)果為python,那么服務(wù)器就知道這是爬蟲,為了避免被服務(wù)器發(fā)現(xiàn)這是爬蟲,通常user-agent參數(shù)值會(huì)設(shè)置瀏覽器的值,但是爬取一個(gè)網(wǎng)址時(shí),每次都需要查看網(wǎng)址network下面的內(nèi)容,顯得比較繁瑣,為什么不自定義一個(gè)隨機(jī)獲取user-agent的值模塊呢?這樣既可以減少查看network帶來的繁瑣,同時(shí)還可以避免服務(wù)器發(fā)現(xiàn)這是同一個(gè)user-agent發(fā)起多次請(qǐng)求。
說了這么多,那么具體怎樣實(shí)現(xiàn)呢?
只需調(diào)用隨機(jī)模塊random的方法choice()即可,這個(gè)方法里面的參數(shù)類型時(shí)列表類型,具體參考代碼如下:
import random class useragent(object): def getUserAgent(self): useragents=[ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', ] return random.choice(useragents)
這樣我們就可以隨機(jī)得到一個(gè)user-agent的值了。
三、最終實(shí)踐
3.1 爬取快代理上的ip
接下來,就是最終實(shí)踐了,制作屬于自己的IP代理模塊。
那么,從哪里獲取IP呢?小編用的是快代理這個(gè)網(wǎng)址,網(wǎng)址鏈接為:https://www.kuaidaili.com/free/inha/1/。
怎樣提取IP呢?小編用的是xpath語法
參考代碼如下:
import requests from crawlers.userAgent import useragent # 導(dǎo)入自己自定義的類,主要作用為隨機(jī)取user-agent的值 from lxml import etree url='https://www.kuaidaili.com/free/inha/1/' headers={'user-agent':useragent().getUserAgent()} rsp=requests.get(url=url,headers=headers) HTML=etree.HTML(rsp.text) infos=HTML.xpath("http://table[@class='table table-bordered table-striped']/tbody/tr") for info in infos: print(info.xpath('./td[1]/text()')) # ip print(info.xpath('./td[2]/text()')) # ip對(duì)應(yīng)的端口 列表類型
怎樣爬取多頁呢?分析快代理那個(gè)網(wǎng)址,可以發(fā)現(xiàn)https://www.kuaidaili.com/free/inha/{頁數(shù)}/ ,花括號(hào)里面就是頁數(shù),這個(gè)網(wǎng)址總頁數(shù)為4038,這里小編只爬取5頁,并且開始頁數(shù)?。?,3000)之間的隨機(jī)數(shù),但是如果for循環(huán)這個(gè)過程,運(yùn)行結(jié)果如下:
原來是請(qǐng)求過快的原因,只需在爬取1頁之后,休眠幾秒鐘即可解決。
3.2 驗(yàn)證爬取到的ip是否可用
這里直接用百度這個(gè)網(wǎng)址作為測(cè)試網(wǎng)址,主要代碼為:
url='https://www.baidu.com' headers={'user-agent':useragent().getUserAgent()} proxies={} # ip ,這里只是講一下關(guān)鍵代碼,沒有給出具體IP rsp=requests.get(url=url,headers=headers,proxies=proxies,time=0.2) # timeout為超時(shí)時(shí)間
只需判斷rsp的狀態(tài)碼為200,如果是,把它添加到一個(gè)指定的列表中。
具體參考代碼小編已經(jīng)上傳到Gitee上,鏈接為:ip代理模塊
當(dāng)然讀者可用把這個(gè)文件保存到python\Lib文件夾下面,這樣就可用隨時(shí)隨地導(dǎo)入了。
3.3 實(shí)戰(zhàn):利用爬取到的ip訪問CSDN博客網(wǎng)址1000次
上述出現(xiàn)那個(gè)錯(cuò)誤,小編上網(wǎng)搜索了一下原因,如下:
我想應(yīng)該是第1種原因,ip被封,我這里沒有設(shè)置超時(shí)時(shí)間,應(yīng)該不會(huì)出現(xiàn)程序請(qǐng)求速度過快。
四、總結(jié)
上述那個(gè)ip代理模塊還有很多的不足點(diǎn),比如用它去訪問一些網(wǎng)址時(shí),不管運(yùn)行多少次,輸出的結(jié)果狀態(tài)碼不會(huì)時(shí)200,這也正常,畢竟免費(fèi)的ip并不是每個(gè)都能用的。如果要說改進(jìn)的話,就是多爬取幾個(gè)不同ip代理網(wǎng)址,去重,這樣的結(jié)果肯定會(huì)比上述的那個(gè)ip代理模塊要好
到此這篇關(guān)于python爬蟲實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊的文章就介紹到這了,更多相關(guān)Python IP代理模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python超簡(jiǎn)單分析評(píng)論提取關(guān)鍵詞制作精美詞云流程
這篇文章主要介紹了使用Python來分析評(píng)論并且提取其中的關(guān)鍵詞,用于制作精美詞云的方法,感興趣的朋友來看看吧2022-03-0312個(gè)Pandas/NumPy中的加速函數(shù)使用總結(jié)
在本文中,數(shù)據(jù)和分析工程師?Kunal?Dhariwal?為我們介紹了?12?種?Numpy?和?Pandas?函數(shù),這些高效的函數(shù)會(huì)令數(shù)據(jù)分析更為容易、便捷2022-09-09Python Pickling 和 Unpickling 的區(qū)別
Python中的Pickling和Unpickling是與數(shù)據(jù)序列化和反序列化相關(guān)的重要概念,本文主要介紹了Python Pickling和Unpickling的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11Python 結(jié)巴分詞實(shí)現(xiàn)關(guān)鍵詞抽取分析
這篇文章主要介紹了Python 結(jié)巴分詞實(shí)現(xiàn)關(guān)鍵詞抽取分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10Python入門教程1. 基本運(yùn)算【四則運(yùn)算、變量、math模塊等】
這篇文章主要介紹了Python教程的基本運(yùn)算,包括四則運(yùn)算、變量的使用與類型檢測(cè)、math模塊等,并附帶了相關(guān)說明,代碼備有較為詳盡的說明,便于理解,需要的朋友可以參考下2018-10-10Python pathlib模塊使用方法及實(shí)例解析
這篇文章主要介紹了Python pathlib模塊使用方法及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10