国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

這篇具有很好參考價(jià)值的文章主要介紹了Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??前言

博主開始更新爬蟲實(shí)戰(zhàn)教程了,期待你的關(guān)注?。?!
第一篇:Python爬蟲實(shí)戰(zhàn)(一):翻頁(yè)爬取數(shù)據(jù)存入SqlServer
第二篇:Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

點(diǎn)贊收藏博主更有創(chuàng)作動(dòng)力喲,以后常更?。?!
Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

構(gòu)建IP池的目的

使用爬蟲時(shí),大部分網(wǎng)站都有一定的反爬措施,有些網(wǎng)站會(huì)限制每個(gè) IP 的訪問速度或訪問次數(shù),超出了它的限制你的 IP 就會(huì)被封掉。對(duì)于訪問速度的處理比較簡(jiǎn)單,只要間隔一段時(shí)間爬取一次就行了,避免頻繁訪問;而對(duì)于訪問次數(shù),就需要使用代理 IP 來(lái)幫忙了,使用多個(gè)代理 IP 輪換著去訪問目標(biāo)網(wǎng)址可以有效地解決問題。

目前網(wǎng)上有很多的代理服務(wù)網(wǎng)站提供代理服務(wù),也提供一些免費(fèi)的代理,但可用性較差,如果需求較高可以購(gòu)買付費(fèi)代理,可用性較好。當(dāng)然我們也可以自己構(gòu)建代理池,從各種代理服務(wù)網(wǎng)站中免費(fèi)獲取代理 IP,并檢測(cè)其可用性(去訪問百度),再保存到文件中,需要使用的時(shí)候再調(diào)用。

Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

爬取目標(biāo)

我們要爬取的網(wǎng)頁(yè)是:https://www.kuaidaili.com/free/inha/

紅色框就是我們要爬取的內(nèi)容:
Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

博主爬取最后實(shí)現(xiàn)的效果如下

Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

準(zhǔn)備工作

我用的是python3.8,VScode編輯器,所需的庫(kù)有:requests、etree、time

開頭導(dǎo)入所需用到的導(dǎo)入的庫(kù)

import requests # python基礎(chǔ)爬蟲庫(kù)
from lxml import etree # 可以將網(wǎng)頁(yè)轉(zhuǎn)換為Elements對(duì)象
import time # 防止爬取過快可以睡眠一秒

準(zhǔn)備就緒開始代碼分析!

代碼分析

Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

先講講我的整體思路在逐步分析

  • 第一步:構(gòu)造主頁(yè)url地址,發(fā)送請(qǐng)求獲取響應(yīng)
  • 第二步:解析數(shù)據(jù),將數(shù)據(jù)分組
  • 第三步:將數(shù)組的數(shù)據(jù)提取出來(lái)
  • 第四步:檢測(cè)代理IP的可用性
  • 第五步:保存到文件中

第一步

構(gòu)造主頁(yè)的url地址,發(fā)送請(qǐng)求獲取響應(yīng)

# 1.發(fā)送請(qǐng)求,獲取響應(yīng)
def send_request(self,page):
    print("=============正在抓取第{}頁(yè)===========".format(page))
    # 目標(biāo)網(wǎng)頁(yè),添加headers參數(shù)
    base_url = 'https://www.kuaidaili.com/free/inha/{}/'.format(page)
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}

    # 發(fā)送請(qǐng)求:模擬瀏覽器發(fā)送請(qǐng)求,獲取響應(yīng)數(shù)據(jù)
    response = requests.get(base_url,headers=headers)
    data = response.content.decode()
    time.sleep(1)

    return data

這會(huì)就有小伙伴不明白了,你headers什么意思啊?

  • 防止服務(wù)器把我們認(rèn)出來(lái)是爬蟲,所以模擬瀏覽器頭部信息,向服務(wù)器發(fā)送消息
  • 這個(gè) “裝” 肯定必須是要裝的?。?!
    Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

第二步

解析數(shù)據(jù),將數(shù)據(jù)分組

從下圖可以看出,我們需要的數(shù)據(jù)都在tr標(biāo)簽中
Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池
所以分組取到tr標(biāo)簽下:

 # 2.解析數(shù)據(jù)
def parse_data(self,data):
    
    # 數(shù)據(jù)轉(zhuǎn)換
    html_data =  etree.HTML(data)
    # 分組數(shù)據(jù)
    parse_list = html_data.xpath('//table[@class="table table-bordered table-striped"]/tbody/tr')

    return parse_list

第三步

提取分組中我們需要的數(shù)據(jù),IP,類型和端口號(hào)

parse_list = self.parse_data(data)
for tr in parse_list:
	proxies_dict  = {}
	http_type = tr.xpath('./td[4]/text()')
	ip_num = tr.xpath('./td[1]/text()')
	port_num = tr.xpath('./td[2]/text()')
	
	http_type = ' '.join(http_type)
	ip_num = ' '.join(ip_num)
	port_num = ' '.join(port_num)
	
	proxies_dict[http_type] = ip_num + ":" + port_num
	
	proxies_list.append(proxies_dict)

這里做了拼接,{'HTTP': '36.111.187.154:8888'}這種形式存入列表,方便我們使用!

Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

第四步

檢測(cè)IP的可用性,因?yàn)槭敲赓M(fèi)的IP所以有一些可能用不了,有一些訪問速度較慢,這里我們讓拼接好的ip去訪問某度0.1秒能訪問成功的保存在另一個(gè)列表中!

def check_ip(self,proxies_list):
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
	
	can_use = []
	for proxies in proxies_list:
	    try:
	        response = requests.get('https://www.baidu.com/',headers=headers,proxies=proxies,timeout=0.1)
	        if response.status_code == 200:
	            can_use.append(proxies)
	
	    except Exception as e:
	        print(e)
	
	return can_use

Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

第五步

將訪問速度不錯(cuò)的ip保存在文件中,方便我們調(diào)用

def save(self,can_use):
	file = open('IP.txt', 'w')
	for i in range(len(can_use)):
	    s = str(can_use[i])+ '\n'
	    file.write(s)
	file.close()

完整代碼

import requests
from lxml import etree 
import time

class daili:

    # 1.發(fā)送請(qǐng)求,獲取響應(yīng)
    def send_request(self,page):
        print("=============正在抓取第{}頁(yè)===========".format(page))
        # 目標(biāo)網(wǎng)頁(yè),添加headers參數(shù)
        base_url = 'https://www.kuaidaili.com/free/inha/{}/'.format(page)
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}

        # 發(fā)送請(qǐng)求:模擬瀏覽器發(fā)送請(qǐng)求,獲取響應(yīng)數(shù)據(jù)
        response = requests.get(base_url,headers=headers)
        data = response.content.decode()
        time.sleep(1)

        return data

    # 2.解析數(shù)據(jù)
    def parse_data(self,data):
        
        # 數(shù)據(jù)轉(zhuǎn)換
        html_data =  etree.HTML(data)
        # 分組數(shù)據(jù)
        parse_list = html_data.xpath('//table[@class="table table-bordered table-striped"]/tbody/tr')
    
        return parse_list

    # 4.檢測(cè)代理IP
    def check_ip(self,proxies_list):
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}

        can_use = []
        for proxies in proxies_list:
            try:
                response = requests.get('https://www.baidu.com/',headers=headers,proxies=proxies,timeout=0.1)
                if response.status_code == 200:
                    can_use.append(proxies)

            except Exception as e:
                print(e)
                
        return can_use

    # 5.保存到文件
    def save(self,can_use):

        file = open('IP.txt', 'w')
        for i in range(len(can_use)):
            s = str(can_use[i])+ '\n'
            file.write(s)
        file.close()
    
    # 實(shí)現(xiàn)主要邏輯
    def run(self):
        proxies_list = []
        # 實(shí)現(xiàn)翻頁(yè),我這里只爬取了四頁(yè)(可以修改5所在的數(shù)字)
        for page in range(1,5):
            data = self.send_request(page)
            parse_list = self.parse_data(data)
            # 3.獲取數(shù)據(jù)
            for tr in parse_list:
                proxies_dict  = {}
                http_type = tr.xpath('./td[4]/text()')
                ip_num = tr.xpath('./td[1]/text()')
                port_num = tr.xpath('./td[2]/text()')

                http_type = ' '.join(http_type)
                ip_num = ' '.join(ip_num)
                port_num = ' '.join(port_num)

                proxies_dict[http_type] = ip_num + ":" + port_num

                proxies_list.append(proxies_dict)
        
        print("獲取到的代理IP數(shù)量:",len(proxies_list))

        can_use = self.check_ip(proxies_list)

        print("能用的代理IP數(shù)量:",len(can_use)) 
        print("能用的代理IP:",can_use) 

        self.save(can_use)

if __name__ == "__main__": 
    dl = daili()
    dl.run()

啟動(dòng)后的效果如下
Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池
并生成文件

Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池
O了O了?。?!
Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池

使用方法

IP保存在文件中了,可有一些小伙伴還不知道怎么去使用?

這里我們需要實(shí)現(xiàn),從文件中隨機(jī)取出一個(gè)IP去訪問網(wǎng)址,用到了random庫(kù)

import random
import requests

# 打開文件,換行讀取
f=open("IP.txt","r")
file = f.readlines()

# 遍歷并分別存入列表,方便隨機(jī)選取IP
item = []
for proxies in file:
    proxies = eval(proxies.replace('\n','')) # 以換行符分割,轉(zhuǎn)換為dict對(duì)象
    item.append(proxies)

proxies = random.choice(item)  # 隨機(jī)選取一個(gè)IP

url = 'https://www.baidu.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}

response = requests.get(url,headers=headers,proxies=proxies)
print(response.status_code) # 輸出狀態(tài)碼 200,表示訪問成功 

有講的不對(duì)的地方,希望各位大佬指正!??!,如果有不明白的地方評(píng)論區(qū)留言回復(fù)!兄弟們來(lái)個(gè)點(diǎn)贊收藏有空就更新爬蟲實(shí)戰(zhàn)?。?!
Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-502240.html

到了這里,關(guān)于Python爬蟲實(shí)戰(zhàn)(二):爬取快代理構(gòu)建代理IP池的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python爬蟲實(shí)戰(zhàn)——小說爬取

    python爬蟲實(shí)戰(zhàn)——小說爬取

    基于 requests 庫(kù)和 lxml 庫(kù)編寫的爬蟲,目標(biāo)小說網(wǎng)站域名http://www.365kk.cc/,類似的小說網(wǎng)站殊途同歸,均可采用本文方法爬取。 目標(biāo)網(wǎng)站 :傳送門 本文的目標(biāo)書籍 :《我的師兄實(shí)在太穩(wěn)健了》 “渡劫只有九成八的把握,和送死有什么區(qū)別?” 網(wǎng)絡(luò)爬蟲的工作實(shí)際上主要分為

    2024年02月06日
    瀏覽(25)
  • Python爬蟲實(shí)戰(zhàn)——爬取新聞數(shù)據(jù)(簡(jiǎn)單的深度爬蟲)

    Python爬蟲實(shí)戰(zhàn)——爬取新聞數(shù)據(jù)(簡(jiǎn)單的深度爬蟲)

    ? ? ? ? 又到了爬新聞的環(huán)節(jié)(好像學(xué)爬蟲都要去爬爬新聞,沒辦法誰(shuí)讓新聞一般都很好爬呢XD,拿來(lái)練練手),只作為技術(shù)分享,這一次要的數(shù)據(jù)是分在了兩個(gè)界面,所以試一下深度爬蟲,不過是很簡(jiǎn)單的。 ?網(wǎng)頁(yè)url 1.先看看網(wǎng)站網(wǎng)址的規(guī)律 ?發(fā)現(xiàn)這部分就是每一天的新聞

    2024年02月11日
    瀏覽(20)
  • 六個(gè)步驟學(xué)會(huì)使用Python爬蟲爬取數(shù)據(jù)(爬蟲爬取微博實(shí)戰(zhàn))

    六個(gè)步驟學(xué)會(huì)使用Python爬蟲爬取數(shù)據(jù)(爬蟲爬取微博實(shí)戰(zhàn))

    用python的爬蟲爬取數(shù)據(jù)真的很簡(jiǎn)單,只要掌握這六步就好,也不復(fù)雜。以前還以為爬蟲很難,結(jié)果一上手,從初學(xué)到把東西爬下來(lái),一個(gè)小時(shí)都不到就解決了。 第一步:安裝requests庫(kù)和BeautifulSoup庫(kù) 在程序中兩個(gè)庫(kù)的書寫是這樣的: 由于我使用的是pycharm進(jìn)行的python編程。所以

    2024年02月08日
    瀏覽(88)
  • python爬蟲實(shí)戰(zhàn)(1)--爬取新聞數(shù)據(jù)

    python爬蟲實(shí)戰(zhàn)(1)--爬取新聞數(shù)據(jù)

    想要每天看到新聞數(shù)據(jù)又不想占用太多時(shí)間去整理,萌生自己抓取新聞網(wǎng)站的想法。 使用python語(yǔ)言可以快速實(shí)現(xiàn),調(diào)用 BeautifulSoup 包里面的方法 安裝BeautifulSoup 完成以后引入項(xiàng)目 定義請(qǐng)求頭,方便把請(qǐng)求包裝成正常的用戶請(qǐng)求,防止被拒絕 定義被抓取的url,并請(qǐng)求加上請(qǐng)求

    2024年02月13日
    瀏覽(31)
  • 快樂學(xué)Python,使用爬蟲爬取電視劇信息,構(gòu)建評(píng)分?jǐn)?shù)據(jù)集

    快樂學(xué)Python,使用爬蟲爬取電視劇信息,構(gòu)建評(píng)分?jǐn)?shù)據(jù)集

    在前面幾篇文章中,我們了解了Python爬蟲技術(shù)的三個(gè)基礎(chǔ)環(huán)節(jié):下載網(wǎng)頁(yè)、提取數(shù)據(jù)以及保存數(shù)據(jù)。 這一篇文章,我們通過實(shí)際操作來(lái)將三個(gè)環(huán)節(jié)串聯(lián)起來(lái),以國(guó)產(chǎn)電視劇為例,構(gòu)建我們的電視劇評(píng)分?jǐn)?shù)據(jù)集。 收集目前國(guó)產(chǎn)電視劇的相關(guān)數(shù)據(jù),需要構(gòu)建國(guó)產(chǎn)電視劇和評(píng)分的

    2024年01月21日
    瀏覽(47)
  • 【爬蟲系列】Python爬蟲實(shí)戰(zhàn)--招聘網(wǎng)站的職位信息爬取

    【爬蟲系列】Python爬蟲實(shí)戰(zhàn)--招聘網(wǎng)站的職位信息爬取

    1. 需求分析 從網(wǎng)上找工作,大家一般都會(huì)通過各種招聘網(wǎng)站去檢索相關(guān)信息,今天利用爬蟲采集招聘網(wǎng)站的職位信息,比如崗位名稱,崗位要求,薪資,公司名稱,公司規(guī)模,公司位置,福利待遇等最為關(guān)心的內(nèi)容。在采集和解析完成后,使用 Excel 或 csv 文件保存。 2. 目標(biāo)

    2024年02月02日
    瀏覽(29)
  • Python中使用隧道爬蟲ip提升數(shù)據(jù)爬取效率

    Python中使用隧道爬蟲ip提升數(shù)據(jù)爬取效率

    作為專業(yè)爬蟲程序員,我們經(jīng)常面臨需要爬取大量數(shù)據(jù)的任務(wù)。然而,有些網(wǎng)站可能會(huì)對(duì)頻繁的請(qǐng)求進(jìn)行限制,這就需要我們使用隧道爬蟲ip來(lái)繞過這些限制,提高數(shù)據(jù)爬取效率。本文將分享如何在Python中使用隧道爬蟲ip實(shí)現(xiàn)API請(qǐng)求與響應(yīng)的技巧。并進(jìn)行詳細(xì)的解析和實(shí)際代碼

    2024年02月12日
    瀏覽(29)
  • Python應(yīng)用-爬蟲實(shí)戰(zhàn)-求是網(wǎng)周刊文章爬取

    任務(wù)描述 本關(guān)任務(wù):編寫一個(gè)爬蟲,并使用正則表達(dá)式獲取求是周刊 2019 年第一期的所有文章的 url 。詳情請(qǐng)查看《求是》2019年第1期?。 相關(guān)知識(shí) 獲取每個(gè)新聞的 url 有以下幾個(gè)步驟: 首先獲取 2019 年第 1 期頁(yè)面的源碼,需要解決部分反爬機(jī)制; 找到目標(biāo) url 所在位置,觀

    2024年02月04日
    瀏覽(35)
  • Python爬蟲實(shí)戰(zhàn)入門:爬取360模擬翻譯(僅實(shí)驗(yàn))

    Python爬蟲實(shí)戰(zhàn)入門:爬取360模擬翻譯(僅實(shí)驗(yàn))

    需求 目標(biāo)網(wǎng)站: https://fanyi.so.com/# 要求:爬取360翻譯數(shù)據(jù)包,實(shí)現(xiàn)翻譯功能 所需第三方庫(kù) requests 簡(jiǎn)介 requests 模塊是 python 基于 urllib,采用 Apache2 Licensed 開源協(xié)議的 HTTP 庫(kù)。它比 urllib 更加方便,可以節(jié)約我們大量的工作,完全滿足 HTTP 測(cè)試需求。 安裝 pip install -i https://py

    2024年02月22日
    瀏覽(24)
  • 【Python】爬蟲代理IP的使用+建立代理IP池

    【Python】爬蟲代理IP的使用+建立代理IP池

    目錄 前言 一、代理IP 1. 代理IP的獲取 2. 代理IP的驗(yàn)證 3. 代理IP的使用 二、建立代理IP池 1. 代理IP池的建立 2. 動(dòng)態(tài)維護(hù)代理IP池 三、完整代碼 總結(jié) 前言 在進(jìn)行網(wǎng)絡(luò)爬蟲開發(fā)時(shí),我們很容易遭遇反爬蟲機(jī)制的阻礙。為了規(guī)避反爬蟲機(jī)制,我們可以使用代理IP。代理IP是指通過代

    2024年02月22日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包