欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python搭建自己IP代理池的方法實現(xiàn)

 更新時間:2023年02月13日 08:30:22   作者:算力鬼才信  
本文主要介紹了Python搭建自己IP代理池的方法實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

IP代理是什么:

ip就是訪問網(wǎng)頁數(shù)據(jù)服務(wù)器位置信息,每一個主機(jī)或者網(wǎng)絡(luò)都有一個自己IP信息

為什么要使用代理ip:

因為在向互聯(lián)網(wǎng)發(fā)送請求中,網(wǎng)頁端會識別客戶端是真實用戶還是爬蟲程序,在今天以互聯(lián)網(wǎng)為主導(dǎo)的世界中,數(shù)據(jù)一種資源,誰能得到更多有效的數(shù)據(jù),誰就能在今天互聯(lián)網(wǎng)世界斗爭中獲得先機(jī),所以網(wǎng)頁是不愿意把數(shù)據(jù)作為開源分享給其他互聯(lián)網(wǎng)運(yùn)營公司的,它會創(chuàng)造出許許多多的反制措施來避免自己的數(shù)據(jù)被其他競爭對手(或利益相關(guān)的其他服務(wù)商),但又不得不為了創(chuàng)造更高的經(jīng)濟(jì)價值,來以非常有限的隧道中讓正常真實用戶訪問它的網(wǎng)頁,所以IP作為訪問者的唯一標(biāo)識,自然而然成為互聯(lián)網(wǎng)公司鑒別真實非爬蟲用戶的一種手段。

如果你設(shè)置的程序訪問時間過快(行為異常)超過了正常人訪問的時間(行為),被訪問的網(wǎng)頁就會判定你是一個爬蟲程序,對你的IP進(jìn)行封禁(一般為5-15分鐘,不會超過12小時)。

所以作為爬蟲工作者為了獲取互聯(lián)網(wǎng)中的數(shù)據(jù),通過以更換ip的方式來再一次訪問該網(wǎng)頁。

因此由于市場需求,網(wǎng)絡(luò)上出現(xiàn)許多以”為爬蟲工作者提供ip地址“的互聯(lián)網(wǎng)公司。

這類互聯(lián)網(wǎng)公司為爬蟲職業(yè)學(xué)習(xí)者,提供了一些免費(fèi)IP信息以供學(xué)習(xí),在真實項目獲取免費(fèi)IP信息的方式是不被建議的,作者期望你能通過付費(fèi)的方式來獲取更多高質(zhì)量的IP資源。

作者作為python爬蟲初學(xué)者賴給大家講述一下,如何搭建自己IP代理池,IP代理池聽名聞義,其實就是裝載了許許多多的高質(zhì)量IP資源,以供學(xué)習(xí)者和工作人員及時的更換IP避免對項目產(chǎn)生不可挽回的損失。

作為爬蟲學(xué)習(xí)者,我們應(yīng)該較其他行業(yè)人員應(yīng)具有爬蟲技術(shù),通過爬蟲來獲取更多IP數(shù)據(jù)。

對IP代理提供商發(fā)起訪問請求:(本次IP資源的提供商為:”云代理“)

import time
import requests
import parsel
#新建一個列表用來存儲完整ip數(shù)據(jù)
proxies_list = []
for page in range(1,8):
    print(f"===========正在爬取第{page}====================")
    time.sleep(1)
    url = 'http://www.ip3366.net/free/?stype=1&page={page_turn}'.format(page_turn=page) #服務(wù)器獲取數(shù)據(jù)
#瀏覽器的身份標(biāo)識
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers)
    #指定一個編碼 = 獲取一個編碼
    response.encoding = response.apparent_encoding
    html_data = response.text

將web服務(wù)器返回頁面數(shù)據(jù)進(jìn)行解析:本次采用xpath解析

#3.數(shù)據(jù)解析 使用xpath 方法,xpath專門用于解析html頁面
    selector = parsel.Selector(html_data) #轉(zhuǎn)換數(shù)據(jù)類型
    # print(selector)
    trs = selector.xpath('//table/tbody/tr')
    # print(trs)
    #將拼接好的完整地址保存在一個名為proxies_list的列表中
    #遍歷每一個tr標(biāo)簽
    for tr in trs:
        ip = tr.xpath('./td[1]/text()').get()
        adr = tr.xpath('./td[2]/text()').get()
        # print(ip,adr)

將獲取的數(shù)據(jù)拼接起來:因為完整ip地址需要加上 http:// 或者 https://

proxies_dict = {
            #字符串的拼接
            "http":"http://"+ip+":"+adr,
            "https":"https://"+ip+":"+adr,
        }

將獲取的完整的IP信息存儲起來

proxies_list.append(proxies_dict)

第二大部分:將獲取到IP數(shù)據(jù)檢測一下是否可用,避免在爬蟲項目中項目浪費(fèi)太多的時間,來檢測ip的可用性。

免費(fèi)IP幾乎百分之九十不可用,所以作為爬蟲工作者建議你購買付費(fèi)數(shù)據(jù)

定義一個函數(shù)用來檢測數(shù)據(jù)是否可用:

def check_ip(proxies_list):
    """ 代理檢測"""
    #將高質(zhì)量可用代理存儲起來
    can_user= []
    for proxie in proxies_list:
        #發(fā)送一個請求以便得到該代理的狀態(tài)碼
        try:
            response = proxie.get(url='https://www.baidu.com',proxies=proxie,timeout=2)
            if response.status_code == 200: #如果該IP訪問百度后,返回的狀態(tài)碼為200時,說明該地阿里可以使用
                #將該代理保存起來
                can_user.append(proxie)
        except:
            print('當(dāng)前代理:',proxie,'請求時間過長不可用')
        #如果代理可用則執(zhí)行else中的語句
        else:
            print('當(dāng)前代理:', proxie, '可以使用')
    return can_user

這里我要說的重點(diǎn)是:

response.status_code == 200

通過向特定的網(wǎng)頁發(fā)起get請求,以返回狀態(tài)碼來檢測該IP數(shù)據(jù)是否正??捎茫绻谟邢薜臅r間中它返回的狀態(tài)碼為200說明該IP數(shù)據(jù)是正??捎玫?。

通過方法的調(diào)用來讓該檢測代碼段運(yùn)行起來:

can_user = check_ip(proxies_list)
print('可以使用的代理:',can_user)
print('可以使用的代理數(shù)量為:',len(can_user))

這里我要說的是:通過check_ip()方法調(diào)用并且向該方法傳遞一個參數(shù)”proxies_list“,該參數(shù)是我們定義的用來存儲在ip提供商那里爬取全部IP數(shù)據(jù),通過調(diào)用該方法,并且將未進(jìn)行識別的ip數(shù)據(jù)傳入。讓檢測程序代碼段運(yùn)行起來,獲取可供使用IP數(shù)據(jù)

文章的最后,我要說的是,希望大家能感激每一位資源的提供者,只有消費(fèi)才會產(chǎn)生價值,帶動市場,我們應(yīng)該尊重勞動者的辛苦勞作。

完整代碼段:

#建立步驟:
'''
爬取提供免費(fèi)代理的網(wǎng)站數(shù)據(jù)(ip地址 端口號,地址信息)
  1.尋找數(shù)據(jù)地址
  2.發(fā)送請求
  3.需要的數(shù)據(jù)(頁面解析保存下來),或者不需要的數(shù)據(jù)(剔除)
  4.需要的數(shù)據(jù)保存(IP地址,端口,拼接https://)
'''
import time
import requests
# 安裝parsel時報錯,經(jīng)過排查應(yīng)該是鏡像源的問題(網(wǎng)絡(luò)上說是盡量使用國內(nèi)鏡像源,國外網(wǎng)速不行,我使用的就是阿里云的鏡像)應(yīng)該是阿里云的鏡像不行,我換了一個豆瓣的鏡像源
#具體使用辦法在安裝包的后面添加上,通過那個鏡像源:pip install parsel -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com   把”庫包名“換成你要安裝的包的名稱即可;
import parsel
#使用代理:
#定義一個函數(shù):
def check_ip(proxies_list):
    """ 代理檢測"""
    #將高質(zhì)量可用代理存儲起來
    can_user= []
    for proxie in proxies_list:
        #發(fā)送一個請求以便得到該代理的狀態(tài)碼
        try:
            response = proxie.get(url='https://www.baidu.com',proxies=proxie,timeout=2)
            if response.status_code == 200: #如果該IP訪問百度后,返回的狀態(tài)碼為200時,說明該地阿里可以使用
                #將該代理保存起來
                can_user.append(proxie)
        except:
            print('當(dāng)前代理:',proxie,'請求時間過長不可用')
        #如果代理可用則執(zhí)行else中的語句
        else:
            print('當(dāng)前代理:', proxie, '可以使用')
    return can_user
 
#1.尋找數(shù)據(jù)的地址
proxies_list = []
for page in range(1,8):
    print(f"===========正在爬取第{page}====================")
    time.sleep(1)
    url = 'http://www.ip3366.net/free/?stype=1&page={page_turn}'.format(page_turn=page) #服務(wù)器獲取數(shù)據(jù)
#瀏覽器的身份標(biāo)識
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers)
    #指定一個編碼 = 獲取一個編碼
    response.encoding = response.apparent_encoding
    html_data = response.text
    #3.數(shù)據(jù)解析 使用xpath 方法,xpath專門用于解析html頁面
    selector = parsel.Selector(html_data) #轉(zhuǎn)換數(shù)據(jù)類型
    # print(selector)
    trs = selector.xpath('//table/tbody/tr')
    # print(trs)
    #將拼接好的完整地址保存在一個名為proxies_list的列表中
    #遍歷每一個tr標(biāo)簽
    for tr in trs:
        ip = tr.xpath('./td[1]/text()').get()
        adr = tr.xpath('./td[2]/text()').get()
        # print(ip,adr)
        proxies_dict = {
            #字符串的拼接
            "http":"http://"+ip+":"+adr,
            "https":"https://"+ip+":"+adr,
        }
        proxies_list.append(proxies_dict)
        print('獲取成功',proxies_dict)
 
    #break 次break是為了檢測第一頁數(shù)據(jù)返回是否正常,其實我獲取的所有免費(fèi)代理
print(proxies_list)
print('獲取的代理數(shù)據(jù)為:',len(proxies_list))
    # proxies_list.append(proxies_dict)
print('==========================正在檢測代理======================')
can_user = check_ip(proxies_list)
print('可以使用的代理:',can_user)
print('可以使用的代理數(shù)量為:',len(can_user))

到此這篇關(guān)于Python搭建自己IP代理池的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)Python搭建IP代理池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python制作微信機(jī)器人教程詳解

    Python制作微信機(jī)器人教程詳解

    這篇文章主要介紹了Python如何實現(xiàn)微信機(jī)器人,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-12-12
  • Sklearn調(diào)優(yōu)之網(wǎng)格搜索與隨機(jī)搜索原理詳細(xì)分析

    Sklearn調(diào)優(yōu)之網(wǎng)格搜索與隨機(jī)搜索原理詳細(xì)分析

    這篇文章主要介紹了Sklearn調(diào)優(yōu)之網(wǎng)格搜索與隨機(jī)搜索原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • python實現(xiàn)自動登錄

    python實現(xiàn)自動登錄

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)自動登錄,填充網(wǎng)頁表單,從而自動登錄WEB門戶,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 在Python中使用matplotlib模塊繪制數(shù)據(jù)圖的示例

    在Python中使用matplotlib模塊繪制數(shù)據(jù)圖的示例

    這篇文章主要介紹了在Python中使用matplotlib模塊繪制數(shù)據(jù)圖的示例,matplotlib模塊經(jīng)常被用來實現(xiàn)數(shù)據(jù)的可視化,需要的朋友可以參考下
    2015-05-05
  • Python中paramiko模塊的基礎(chǔ)操作與排錯問題

    Python中paramiko模塊的基礎(chǔ)操作與排錯問題

    python的ssh庫操作需要引入一個遠(yuǎn)程控制的模塊——paramiko,可用于對遠(yuǎn)程服務(wù)器進(jìn)行命令或文件操作,這篇文章主要介紹了Python學(xué)習(xí)之paramiko模塊的基礎(chǔ)操作與排錯,需要的朋友可以參考下
    2022-09-09
  • python openpyxl 帶格式復(fù)制表格的實現(xiàn)

    python openpyxl 帶格式復(fù)制表格的實現(xiàn)

    這篇文章主要介紹了python openpyxl 帶格式復(fù)制表格的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python定義類的簡單用法

    python定義類的簡單用法

    在本篇文章里小編給大家分享的是一篇關(guān)于python定義類的簡單用法,需要的朋友們可以參考下。
    2020-07-07
  • python加載自定義詞典實例

    python加載自定義詞典實例

    今天小編就為大家分享一篇python加載自定義詞典實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 詳解PyTorch手寫數(shù)字識別(MNIST數(shù)據(jù)集)

    詳解PyTorch手寫數(shù)字識別(MNIST數(shù)據(jù)集)

    這篇文章主要介紹了詳解PyTorch手寫數(shù)字識別(MNIST數(shù)據(jù)集),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 利用numpy+matplotlib繪圖的基本操作教程

    利用numpy+matplotlib繪圖的基本操作教程

    這篇文章主要給大家介紹了利用numpy+matplotlib繪圖的基本操作,文中介紹的非常詳細(xì),對大家學(xué)習(xí)matplotlib繪圖具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-05-05

最新評論