91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-27 12:31:08 來源:億速云 閱讀:205 作者:小新 欄目:開發技術

這篇文章主要介紹Python爬蟲Scrapy框架IP代理如何配置與調試,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

代理ip的邏輯在哪里

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

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

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

# Scrapy 內置的 Downloader Middleware 為 Scrapy 供了基礎的功能,
# 定義一個類,其中(object)可以不寫,效果一樣
class SimpleProxyMiddleware(object):
    # 聲明一個數組
    proxyList = ['http://218.75.158.153:3128','http://188.226.141.61:8080']
    
    # Downloader Middleware的核心方法,只有實現了其中一個或多個方法才算自定義了一個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的核心方法,只有實現了其中一個或多個方法才算自定義了一個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 文件中的這塊區域

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

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

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

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

# -*- 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函數也是整個程序入口的慣用寫法
if __name__ == '__main__':
    execute(['scrapy', 'crawl', 'httpbin'])

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

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

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

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

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

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

如何配置動態的代理ip

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

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

修改 setting.py 的 DOWNLOADER_MIDDLEWARES 內容

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

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

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

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

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

以上是“Python爬蟲Scrapy框架IP代理如何配置與調試”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

义乌市| 霞浦县| 孝昌县| 青龙| 宁远县| 瓮安县| 衡阳市| 德兴市| 连南| 平阴县| 长顺县| 晋中市| 文登市| 景谷| 泰兴市| 东宁县| 万山特区| 康定县| 荃湾区| 本溪| 富蕴县| 外汇| 木里| 漾濞| 奎屯市| 棋牌| 波密县| 贺州市| 雷山县| 莱阳市| 仪征市| 五峰| 高青县| 尼勒克县| 湘潭县| 平罗县| 正宁县| 漳州市| 西昌市| 南和县| 阜新市|