Python爬蟲(chóng)實(shí)現(xiàn)搭建代理ip池
前言
在使用爬蟲(chóng)的時(shí)候,很多網(wǎng)站都有一定的反爬措施,甚至在爬取大量的數(shù)據(jù)或者頻繁地訪問(wèn)該網(wǎng)站多次時(shí)還可能面臨ip被禁,所以這個(gè)時(shí)候我們通常就可以找一些代理ip來(lái)繼續(xù)爬蟲(chóng)測(cè)試。
下面就開(kāi)始來(lái)簡(jiǎn)單地介紹一下爬取免費(fèi)的代理ip來(lái)搭建自己的代理ip池:本次爬取免費(fèi)ip代理的網(wǎng)址:http://www.ip3366.net/free/
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、User-Agent
在發(fā)送請(qǐng)求的時(shí)候,通常都會(huì)做一個(gè)簡(jiǎn)單的反爬。這時(shí)可以用fake_useragent模塊來(lái)設(shè)置一個(gè)請(qǐng)求頭,用來(lái)進(jìn)行偽裝成瀏覽器,下面兩種方法都可以。
from fake_useragent import UserAgent
headers = {
# 'User-Agent': UserAgent().random #常見(jiàn)瀏覽器的請(qǐng)求頭偽裝(如:火狐,谷歌)
'User-Agent': UserAgent().Chrome #谷歌瀏覽器
}
二、發(fā)送請(qǐng)求
response = requests.get(url='http://www.ip3366.net/free/', headers=request_header())
# text = response.text.encode('ISO-8859-1')
# print(text.decode('gbk'))三、解析數(shù)據(jù)
我們只需要解析出ip、port即可。


使用xpath解析(個(gè)人很喜歡用)(當(dāng)然還有很多的解析方法,如:正則,css選擇器,BeautifulSoup等等)。
#使用xpath解析,提取出數(shù)據(jù)ip,端口
html = etree.HTML(response.text)
tr_list = html.xpath('/html/body/div[2]/div/div[2]/table/tbody/tr')
for td in tr_list:
ip_ = td.xpath('./td[1]/text()')[0] #ip
port_ = td.xpath('./td[2]/text()')[0] #端口
proxy = ip_ + ':' + port_ #115.218.5.5:9000四、構(gòu)建ip代理池,檢測(cè)ip是否可用
#構(gòu)建代理ip
proxy = ip + ':' + port
proxies = {
"http": "http://" + proxy,
"https": "http://" + proxy,
# "http": proxy,
# "https": proxy,
}
try:
response = requests.get(url='https://www.baidu.com/',headers=request_header(),proxies=proxies,timeout=1) #設(shè)置timeout,使響應(yīng)等待1s
response.close()
if response.status_code == 200:
print(proxy, '\033[31m可用\033[0m')
else:
print(proxy, '不可用')
except:
print(proxy,'請(qǐng)求異常')五、完整代碼
import requests #導(dǎo)入模塊
from lxml import etree
from fake_useragent import UserAgent
#簡(jiǎn)單的反爬,設(shè)置一個(gè)請(qǐng)求頭來(lái)偽裝成瀏覽器
def request_header():
headers = {
# 'User-Agent': UserAgent().random #常見(jiàn)瀏覽器的請(qǐng)求頭偽裝(如:火狐,谷歌)
'User-Agent': UserAgent().Chrome #谷歌瀏覽器
}
return headers
'''
創(chuàng)建兩個(gè)列表用來(lái)存放代理ip
'''
all_ip_list = [] #用于存放從網(wǎng)站上抓取到的ip
usable_ip_list = [] #用于存放通過(guò)檢測(cè)ip后是否可以使用
#發(fā)送請(qǐng)求,獲得響應(yīng)
def send_request():
#爬取7頁(yè),可自行修改
for i in range(1,8):
print(f'正在抓取第{i}頁(yè)……')
response = requests.get(url=f'http://www.ip3366.net/free/?page={i}', headers=request_header())
text = response.text.encode('ISO-8859-1')
# print(text.decode('gbk'))
#使用xpath解析,提取出數(shù)據(jù)ip,端口
html = etree.HTML(text)
tr_list = html.xpath('/html/body/div[2]/div/div[2]/table/tbody/tr')
for td in tr_list:
ip_ = td.xpath('./td[1]/text()')[0] #ip
port_ = td.xpath('./td[2]/text()')[0] #端口
proxy = ip_ + ':' + port_ #115.218.5.5:9000
all_ip_list.append(proxy)
test_ip(proxy) #開(kāi)始檢測(cè)獲取到的ip是否可以使用
print('抓取完成!')
print(f'抓取到的ip個(gè)數(shù)為:{len(all_ip_list)}')
print(f'可以使用的ip個(gè)數(shù)為:{len(usable_ip_list)}')
print('分別有:\n', usable_ip_list)
#檢測(cè)ip是否可以使用
def test_ip(proxy):
#構(gòu)建代理ip
proxies = {
"http": "http://" + proxy,
"https": "http://" + proxy,
# "http": proxy,
# "https": proxy,
}
try:
response = requests.get(url='https://www.baidu.com/',headers=request_header(),proxies=proxies,timeout=1) #設(shè)置timeout,使響應(yīng)等待1s
response.close()
if response.status_code == 200:
usable_ip_list.append(proxy)
print(proxy, '\033[31m可用\033[0m')
else:
print(proxy, '不可用')
except:
print(proxy,'請(qǐng)求異常')
if __name__ == '__main__':
send_request()總結(jié)
到此這篇關(guān)于Python爬蟲(chóng)實(shí)現(xiàn)搭建代理ip池的文章就介紹到這了,更多相關(guān)Python代理ip池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python對(duì)視頻畫(huà)框標(biāo)記后保存的方法
今天小編就為大家分享一篇python對(duì)視頻畫(huà)框標(biāo)記后保存的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
python語(yǔ)言中pandas字符串分割str.split()函數(shù)
分列在我們?nèi)粘9ぷ髦薪?jīng)常用到,從各種系統(tǒng)中導(dǎo)出的什么訂單號(hào)、名稱、日期很多都是復(fù)合組成的,這些列在匹配、合并時(shí)沒(méi)有辦法使用,我們經(jīng)常需要將她們分開(kāi),下面這篇文章主要給大家介紹了關(guān)于python語(yǔ)言中pandas字符串分割str.split()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-08-08
Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip
這篇文章主要介紹了Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Python腳本操作Excel實(shí)現(xiàn)批量替換功能
這篇文章主要介紹了Python腳本操作Excel實(shí)現(xiàn)批量替換功能,本文使用的是Openpyxl工具,通過(guò)實(shí)例截圖給大家講解的非常詳細(xì),需要的朋友可以參考下2019-11-11
一步步教你用python連接oracle數(shù)據(jù)庫(kù)
oracle作為最強(qiáng)大的數(shù)據(jù)庫(kù),Python也提供了足夠的支持。不過(guò)與其他數(shù)據(jù)庫(kù)略有不同,下面這篇文章主要給大家介紹了關(guān)于如何使用python連接oracle數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2023-04-04
使用Flask創(chuàng)建簡(jiǎn)單的圖片上傳站點(diǎn)的流程步驟
在網(wǎng)絡(luò)應(yīng)用程序中,實(shí)現(xiàn)圖片上傳功能是一項(xiàng)常見(jiàn)的需求,Flask框架提供了簡(jiǎn)單而靈活的工具,使得構(gòu)建這樣的功能變得相對(duì)簡(jiǎn)單,本文將介紹如何使用Flask框架創(chuàng)建一個(gè)簡(jiǎn)單的圖片上傳站點(diǎn),以及其中涉及的關(guān)鍵技術(shù)和步驟,需要的朋友可以參考下2024-05-05
Python使用BeautifulSoup爬取網(wǎng)頁(yè)數(shù)據(jù)的操作步驟
在網(wǎng)絡(luò)時(shí)代,數(shù)據(jù)是最寶貴的資源之一,而爬蟲(chóng)技術(shù)就是一種獲取數(shù)據(jù)的重要手段,Python 作為一門(mén)高效、易學(xué)、易用的編程語(yǔ)言,自然成為了爬蟲(chóng)技術(shù)的首選語(yǔ)言之一,本文將介紹如何使用 BeautifulSoup 爬取網(wǎng)頁(yè)數(shù)據(jù),并提供詳細(xì)的代碼和注釋,幫助讀者快速上手2023-11-11

