亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python爬蟲Scrapy框架IP代理的配置與調(diào)試

 更新時(shí)間:2021年12月27日 10:45:51   作者:Python新世界  
在調(diào)試爬蟲的時(shí)候,新手都會(huì)遇到關(guān)于ip的錯(cuò)誤,本文就來介紹一下Python爬蟲Scrapy框架IP代理的配置與調(diào)試,具有一定的參考價(jià)值,感興趣的可以了解一下

在調(diào)試爬蟲的時(shí)候,新手都會(huì)遇到關(guān)于ip的錯(cuò)誤,好好的程序突然報(bào)錯(cuò)了,怎么解決,關(guān)于ip訪問的錯(cuò)誤其實(shí)很好解決,但是怎么知道解決好了呢?怎么確定是代理ip的問題呢?由于筆者主修語言是Java,所以有些解釋可能和Python大佬們的解釋不一樣,因?yàn)槲沂菑腏ava 的角度看Python。這樣也便于Java開發(fā)人員閱讀理解。

代理ip的邏輯在哪里

一個(gè)scrapy 的項(xiàng)目結(jié)構(gòu)是這樣的

scrapydownloadertest  # 項(xiàng)目文件夾
    │  items.py       # 定義爬取結(jié)果存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)
    │  middlewares.py  # 中間件(可以理解java的過濾器攔截器)
    │  pipelines.py   # 數(shù)據(jù)管道,對(duì)獲取到的數(shù)據(jù)做操作
    │  settings.py   # 項(xiàng)目的配置文件
    │  __init__.py   # 初始化邏輯
    │
    ├─spiders  # 放置 Spiders 的文件夾
    │  │  httpProxyIp.py   # 爬取到結(jié)果后的處理類
    │  │  __init__.py    # spider初始化邏輯
scrapy.py  

從上可以發(fā)現(xiàn),代理ip的設(shè)置肯定是在發(fā)送請(qǐng)求之前就要設(shè)置好,那么唯一符合條件的地方就是?middlewares.py?,所以關(guān)于代理的相關(guān)邏輯都寫在這個(gè)里面。直接在其中添加如下代碼:

# Scrapy 內(nèi)置的 Downloader Middleware 為 Scrapy 供了基礎(chǔ)的功能,
# 定義一個(gè)類,其中(object)可以不寫,效果一樣
class SimpleProxyMiddleware(object):
    # 聲明一個(gè)數(shù)組
    proxyList = ['http://218.75.158.153:3128','http://188.226.141.61:8080']
    
    # Downloader Middleware的核心方法,只有實(shí)現(xiàn)了其中一個(gè)或多個(gè)方法才算自定義了一個(gè)Downloader Middleware
    def process_request(self, request, spider):
        # 隨機(jī)從其中選擇一個(gè),并去除左右兩邊空格
        proxy = random.choice(self.proxyList).strip()
        # 打印結(jié)果出來觀察
        print("this is request ip:" + proxy)
        # 設(shè)置request的proxy屬性的內(nèi)容為代理ip
        request.meta['proxy'] = proxy

    # Downloader Middleware的核心方法,只有實(shí)現(xiàn)了其中一個(gè)或多個(gè)方法才算自定義了一個(gè)Downloader Middleware
    def process_response(self, request, response, spider):
        # 請(qǐng)求失敗不等于200
        if response.status != 200:
            # 重新選擇一個(gè)代理ip
            proxy = random.choice(self.proxyList).strip()
            print("this is response ip:" + proxy)
            # 設(shè)置新的代理ip內(nèi)容
            request.mete['proxy'] = proxy
            return request
        return response

每個(gè) Downloader Middleware 定義了一個(gè)或多個(gè)方法的類,核心的方法有如下三個(gè):

  • process_request(request, spider)
  • process_response(request,response, spider)
  • process_exception(request, exception, spider)

然后找到?setting.py?文件中的這塊區(qū)域

修改如下,也就是取消注釋,加上剛剛寫的Middleware 類的路徑

以上就已經(jīng)配置好了一個(gè)簡(jiǎn)單的代理ip,此時(shí)來到?httpProxyIp.py?這個(gè)文件, 這個(gè)文件是我通過命令?scrapy genspider httpProxyIp icanhazip.com?生成的,創(chuàng)建成功內(nèi)容如下:

# -*- coding: utf-8 -*-
import scrapy

class HttpproxyipSpider(scrapy.Spider):
    name = 'httpProxyIp'
    allowed_domains = ['icanhazip.com']
    start_urls = ['http://icanhazip.com/']

    def parse(self, response):
        pass

我們修改一下,最終代碼如下所示:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.cmdline import execute

class HttpproxyipSpider(scrapy.Spider):
    # spider 任務(wù)名
    name = 'httpProxyIp'
    # 允許訪問的域名
    allowed_domains = ['icanhazip.com']
    # 起始爬取的url
    start_urls = ['http://icanhazip.com/']

    # spider 爬蟲解析的方法,關(guān)于內(nèi)容的解析都在這里完成; self表示實(shí)例的引用, response爬蟲的結(jié)果
    def parse(self, response):
        print('代理后的ip: ', response.text)

# 這個(gè)是main函數(shù)也是整個(gè)程序入口的慣用寫法
if __name__ == '__main__':
    execute(['scrapy', 'crawl', 'httpbin'])

此時(shí)運(yùn)行程序?scrapy crawl httpProxyIp?可以看到結(jié)果輸出

很明顯,這里沒有打印出我們想要的結(jié)果,說明之前?proxyList = ['http://218.75.158.153:3128','http://188.226.141.61:8080']?沒有用,我們找找有沒有可以用的,這里用免費(fèi)的,所以找起來費(fèi)點(diǎn)時(shí)間?免費(fèi)代理ip

這樣就完成了scrapy的代理設(shè)置和驗(yàn)證調(diào)試。

如何配置動(dòng)態(tài)的代理ip

這里使用的是收費(fèi)的代理ip了,你可以使用快代理或者阿布云等云服務(wù)商提供的服務(wù),當(dāng)你注冊(cè)并繳費(fèi)之后,會(huì)給你一個(gè)訪問url和用戶名密碼,這里直接看代碼吧! 同樣在?middlewares.py新建一個(gè)類

修改?setting.py?的?DOWNLOADER_MIDDLEWARES?內(nèi)容

DOWNLOADER_MIDDLEWARES = {
    # 注釋掉之前的例子改用AbuyunProxyMiddleware
    # 'scrapydownloadertest.middlewares.SimpleProxyMiddleware': 100,
    'scrapydownloadertest.middlewares.AbuyunProxyMiddleware': 100,
}

其他地方不動(dòng),我們?cè)趩?dòng)看看,這里換種啟動(dòng)方式,因?yàn)槭褂玫氖荘yCharm開發(fā)工具,所以可以直接

http://icanhazip.com/是一個(gè)顯示當(dāng)前訪問者ip的網(wǎng)站,可以很方便的用來驗(yàn)證scrapy的代理ip 設(shè)置是否成功。

到此這篇關(guān)于Python爬蟲Scrapy框架IP代理的配置與調(diào)試的文章就介紹到這了,更多相關(guān)Scrapy框架IP代理配置調(diào)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django后端接收嵌套Json數(shù)據(jù)及解析詳解

    Django后端接收嵌套Json數(shù)據(jù)及解析詳解

    這篇文章主要介紹了Django后端接收嵌套Json數(shù)據(jù)及解析詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python實(shí)現(xiàn)簡(jiǎn)單過濾文本段的方法

    Python實(shí)現(xiàn)簡(jiǎn)單過濾文本段的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單過濾文本段的方法,涉及Python針對(duì)文本的讀取及字符串遍歷、判斷、打印等相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • Python數(shù)據(jù)分析之繪制ppi-cpi剪刀差圖形

    Python數(shù)據(jù)分析之繪制ppi-cpi剪刀差圖形

    這篇文章主要介紹了Python數(shù)據(jù)分析之繪制ppi-cpi剪刀差圖形,ppi-cp剪刀差是通過這個(gè)指標(biāo)可以了解當(dāng)前的經(jīng)濟(jì)運(yùn)行狀況,下文更多詳細(xì)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-05-05
  • 基于pytorch實(shí)現(xiàn)運(yùn)動(dòng)鞋品牌識(shí)別功能

    基于pytorch實(shí)現(xiàn)運(yùn)動(dòng)鞋品牌識(shí)別功能

    這篇文章主要給大家介紹了關(guān)于如何基于pytorch實(shí)現(xiàn)運(yùn)動(dòng)鞋品牌識(shí)別功能,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PyTorch具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2024-02-02
  • Python解析多幀dicom數(shù)據(jù)詳解

    Python解析多幀dicom數(shù)據(jù)詳解

    今天小編就為大家分享一篇Python解析多幀dicom數(shù)據(jù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • PyTorch中torch.utils.data.DataLoader實(shí)例詳解

    PyTorch中torch.utils.data.DataLoader實(shí)例詳解

    torch.utils.data.DataLoader主要是對(duì)數(shù)據(jù)進(jìn)行batch的劃分,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.utils.data.DataLoader的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • matlab調(diào)用python的各種方法舉例子詳解

    matlab調(diào)用python的各種方法舉例子詳解

    為了發(fā)揮matlab的繪圖優(yōu)勢(shì)+原先python寫好的功能組合方式,下面這篇文章主要給大家介紹了關(guān)于matlab調(diào)用python的各種方法,需要的朋友可以參考下
    2023-09-09
  • Python的MongoDB模塊PyMongo操作方法集錦

    Python的MongoDB模塊PyMongo操作方法集錦

    這篇文章主要介紹了Python的MongoDB模塊PyMongo操作方法集錦,包括數(shù)據(jù)的增刪查改以及索引等相關(guān)的基本操作,需要的朋友可以參考下
    2016-01-01
  • Keras使用ImageNet上預(yù)訓(xùn)練的模型方式

    Keras使用ImageNet上預(yù)訓(xùn)練的模型方式

    這篇文章主要介紹了Keras使用ImageNet上預(yù)訓(xùn)練的模型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python中dict字典的查詢鍵值對(duì) 遍歷 排序 創(chuàng)建 訪問 更新 刪除基礎(chǔ)操作方法

    python中dict字典的查詢鍵值對(duì) 遍歷 排序 創(chuàng)建 訪問 更新 刪除基礎(chǔ)操作方法

    字典的每個(gè)鍵值(key=>value)對(duì)用冒號(hào)(:)分割,每個(gè)對(duì)之間用逗號(hào)(,)分割,整個(gè)字典包括在花括號(hào)({})中,本文講述了python中dict字典的查詢鍵值對(duì) 遍歷 排序 創(chuàng)建 訪問 更新 刪除基礎(chǔ)操作方法
    2018-09-09

最新評(píng)論