最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬蟲Scrapy框架IP代理的配置與調試

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

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

代理ip的邏輯在哪里

一個scrapy 的項目結構是這樣的

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

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

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

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

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

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

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

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

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

# -*- 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 任務名
    name = 'httpProxyIp'
    # 允許訪問的域名
    allowed_domains = ['icanhazip.com']
    # 起始爬取的url
    start_urls = ['http://icanhazip.com/']

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

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

此時運行程序?scrapy crawl httpProxyIp?可以看到結果輸出

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

這樣就完成了scrapy的代理設置和驗證調試。

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

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

修改?setting.py?的?DOWNLOADER_MIDDLEWARES?內容

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

其他地方不動,我們在啟動看看,這里換種啟動方式,因為使用的是PyCharm開發(fā)工具,所以可以直接

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

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

相關文章

  • Python學習筆記之抓取某只基金歷史凈值數(shù)據(jù)實戰(zhàn)案例

    Python學習筆記之抓取某只基金歷史凈值數(shù)據(jù)實戰(zhàn)案例

    這篇文章主要介紹了Python學習筆記之抓取某只基金歷史凈值數(shù)據(jù)案例,結合具體實例形式分析了Python基于selenium庫的數(shù)據(jù)抓取及mysql交互相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • Django的restframework接口框架自定義返回數(shù)據(jù)格式的示例詳解

    Django的restframework接口框架自定義返回數(shù)據(jù)格式的示例詳解

    這篇文章主要介紹了Django的restframework接口框架自定義返回數(shù)據(jù)格式,本文介紹了通過Django的restframework接口框架自定義Response返回對象來自定義返回數(shù)據(jù)格式,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 詳解KMP算法以及python如何實現(xiàn)

    詳解KMP算法以及python如何實現(xiàn)

    這篇文章主要介紹了KMP算法的相關知識以及python如何實現(xiàn),幫助大家更好的進行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2020-09-09
  • 從訓練好的tensorflow模型中打印訓練變量實例

    從訓練好的tensorflow模型中打印訓練變量實例

    今天小編就為大家分享一篇從訓練好的tensorflow模型中打印訓練變量實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python中的Decorator裝飾器的使用示例

    Python中的Decorator裝飾器的使用示例

    裝飾器(decorator)在Python框架中扮演著重要角色,是Python中實現(xiàn)切面編程(AOP)的重要手段,本文將通過簡單的示例和大家介紹下具體的使用方法,希望對大家有所幫助
    2022-12-12
  • Python如何批量提取pdf文本內容

    Python如何批量提取pdf文本內容

    PyMuPDF功能強大,并且支持文本提取、圖片提取、頁面操作等,本文將為大家介紹一下Python如何使用PyMuPDF批量提取PDF文本內容,感興趣的可以了解下
    2025-04-04
  • Python學習之異常中的finally使用詳解

    Python學習之異常中的finally使用詳解

    這篇文章主要為大家介紹一下Python異常語法中的另一個成員—finally,通過學習finally,可以幫助我們更好的處理異常,快來跟隨小編一起學習一下吧
    2022-03-03
  • Python中的urllib模塊使用詳解

    Python中的urllib模塊使用詳解

    這篇文章主要介紹了Python中的urllib模塊使用詳解,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-07-07
  • Python實現(xiàn)發(fā)送郵件到自己郵箱

    Python實現(xiàn)發(fā)送郵件到自己郵箱

    在日常開發(fā)中,我們經(jīng)常需要監(jiān)控應用程序的狀態(tài),及時發(fā)現(xiàn)問題并采取措施解決。而通過郵件發(fā)送報警信息則是一種常見的實現(xiàn)方式。本文就來介紹一下Python實現(xiàn)發(fā)送郵件到自己郵箱的方法
    2023-04-04
  • pytorch 中autograd.grad()函數(shù)的用法說明

    pytorch 中autograd.grad()函數(shù)的用法說明

    這篇文章主要介紹了pytorch 中autograd.grad()函數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論

两当县| 罗定市| 绥德县| 西乡县| 新巴尔虎右旗| 新兴县| 滨州市| 泗洪县| 凤台县| 扶沟县| 夏邑县| 昌黎县| 砚山县| 金堂县| 宜兰市| 伊宁县| 手游| 惠东县| 沈阳市| 伊金霍洛旗| 浪卡子县| 郁南县| 广河县| 麦盖提县| 余姚市| 乐亭县| 安阳市| 安国市| 聂拉木县| 咸丰县| 西峡县| 阳原县| 稷山县| 东兰县| 漾濞| 孟津县| 连山| 武邑县| 南皮县| 夹江县| 镇远县|