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

爬蟲學(xué)習(xí) Scrapy中間件&代理&UA隨機(jī)&selenium使用

這篇具有很好參考價(jià)值的文章主要介紹了爬蟲學(xué)習(xí) Scrapy中間件&代理&UA隨機(jī)&selenium使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


中間件

控制臺(tái)操作 (百度只起個(gè)名

scrapy startproject mid
scrapy genspider baidu baidu.com

setting.py內(nèi)

ROBOTSTXT_OBEY = False

LOG_LEVEL = "WARNING"

運(yùn)行

scrapy crawl baidu

middlewares.py 中間件
爬蟲學(xué)習(xí) Scrapy中間件&代理&UA隨機(jī)&selenium使用,Python爬蟲,爬蟲,學(xué)習(xí),scrapy

先看下載器中間件

# Not all methods need to be defined. If a method is not defined,
    # scrapy acts as if the downloader middleware does not modify the
    # passed objects.

重點(diǎn)在 process_request

在引擎將請(qǐng)求的信息交給下載器之前,自動(dòng)的調(diào)用該方法

process_response…
process_exception 異常 (看名就知道了…)
spider_open 爬蟲開始

setting.py內(nèi) DOWNLOADER_MIDDLEWARES

運(yùn)行順序
爬蟲學(xué)習(xí) Scrapy中間件&代理&UA隨機(jī)&selenium使用,Python爬蟲,爬蟲,學(xué)習(xí),scrapy


UA、代理處理—process_request

process_request 返回值有規(guī)定

  1. 如果返回的 None,不做攔截,繼續(xù)向后面的中間件執(zhí)行.(多個(gè)中間件,權(quán)重大越往后)
  2. 如果返回的是Request.后續(xù)的中間件將不再執(zhí)行.將請(qǐng)求重新交給引擎.引擎重新扔給調(diào)度器
  3. 如果返回的是Response,后續(xù)的中間件將不再執(zhí)行.將響應(yīng)信息交給引擎,引擎將響應(yīng)丟給spider.進(jìn)行數(shù)據(jù)處理

一個(gè)請(qǐng)求return ;yield一群

弄2個(gè)中間件???e.g.權(quán)重544 545

UA隨機(jī)

老樣子:

scrapy startproject douban
cd…
scrapy genspider movie douban.com
改setting

ROBOTSTXT_OBEY = False
LOG_LEVEL = “WARNING”

scrapy crawl movie

豆瓣UA 失敗

setting 內(nèi)有
USER_AGENT =

動(dòng)態(tài)UA

可以使用useragentsring.com設(shè)置一個(gè)USER_AGENT_LIST
middlewares只留process_request即可

def process_request(self, request, spider):
        UA = choice(USER_AGENT_LIST)
        request.headers['User-Agent'] = UA
        return None

開啟setting內(nèi)的

DOWNLOADER_MIDDLEWARES = {
   "douban.middlewares.DoubanDownloaderMiddleware": 543,
}

代理處理

setting內(nèi)

DOWNLOADER_MIDDLEWARES = {
   "douban.middlewares.DoubanDownloaderMiddleware": 543,
   "douban.middlewares.ProxyDownloaderMiddleware": 545, #加
}

PROXY_IP_LIST = {
    "IP:端口","IP:端口"
}

middlewares.py內(nèi)

from douban.settings import PROXY_IP_LIST
from random import choice #隨機(jī)

......

class ProxyDOwnloaderMiddleware:
    def process_request(self,request,spider)
        ip = choice(ProxyDOwnloaderMiddleware)
        request.meta['proxy'] = "https://"+ip
        return None  #放行


selenium+scrapy

selenium作為下載器

由于想要替換掉原來(lái)的downloader,原中間件無(wú)意義

原最大中間價(jià)最大優(yōu)先級(jí)100

DOWNLOADER_MIDDLEWARES = {
   "zhipin.middlewares.ZhipinDownloaderMiddleware": 99,
}

如果有多個(gè)spider,替換掉的下載器可能占全局

想辦法適配判斷是否使用selenium 處理請(qǐng)求

新建request.py

from scrapy import Request


class SeleniumRequest(Request): #繼承Request ,導(dǎo)致功能與scrapy一致
    pass

爬蟲內(nèi)

from typing import Iterable
import scrapy

from zhipin.request import SeleniumRequest


class ZpSpider(scrapy.Spider):
    name = "zp"
    allowed_domains = ["zhipin.com"]
    start_urls = ["https://zhipin.com"]


    def start_requests(self):
        yield SeleniumRequest(
            url=self.start_urls[0],
            callback=self.parse
        )
    def parse(self, response):
        pass

middleware

from zhipin.request import SeleniumRequest

......

def process_request(self, request, spider):
        #所有請(qǐng)求都回到這里
        #需要進(jìn)行判斷。判斷出是否需要用selenium來(lái)處理請(qǐng)求
        #開始selenium的操作,返回頁(yè)面源代碼組裝的response
        #isinstance 判斷xxx , 是不是 xxx類型
        if isinstance(request,SeleniumRequest):
            pass
        else:
            return None
        return None

isinstance() 函數(shù)來(lái)判斷一個(gè)對(duì)象是否是一個(gè)已知的類型,類似 type()。

isinstance() 與 type() 區(qū)別:

  • type() 不會(huì)認(rèn)為子類是一種父類類型,不考慮繼承關(guān)系。
  • isinstance() 會(huì)認(rèn)為子類是一種父類類型,考慮繼承關(guān)系。

如果要判斷兩個(gè)類型是否相同推薦使用 isinstance()。

不能以原來(lái)的思路寫selenium ,因?yàn)橹挥?個(gè)返回值–None、 Request、 Response、

封裝一個(gè)響應(yīng)對(duì)象

在middlewares.py 導(dǎo)入一個(gè)類文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-842624.html

from scrapy.http.response.html import HtmlResponse

......

def process_request(self, request, spider):
        if isinstance(request,SeleniumRequest):
       		self.web.get(request.url)
        	page_source = self.web.page_source
        	return HtmlResponse(
                url = request.url,
                status=200,
                headers=None,
                body=page_source,
                flags=None,
                request=request,
                Encoding = "utf-8"
                ) #來(lái)源于父類
            return None

到了這里,關(guān)于爬蟲學(xué)習(xí) Scrapy中間件&代理&UA隨機(jī)&selenium使用的文章就介紹完了。如果您還想了解更多內(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)文章

  • 【云計(jì)算學(xué)習(xí)教程】什么是中間件?常見中間件有哪些?

    【云計(jì)算學(xué)習(xí)教程】什么是中間件?常見中間件有哪些?

    3)最后 Apache 把這個(gè)臨時(shí)的靜態(tài)網(wǎng)頁(yè)文件發(fā)給用戶。 采用 Perl、Python 和 Ruby 腳本語(yǔ)言編寫的動(dòng)態(tài)網(wǎng)頁(yè),其工作過(guò)程與 PHP 類似。 Apache 是最流行的開源網(wǎng)站服務(wù)器,在世界排名前 100 萬(wàn)的網(wǎng)站中,有 60.6% 的網(wǎng)站采用 Apache;在排名前 1000 的大型網(wǎng)站中,Apache 占到了 34.5%,而 N

    2024年04月22日
    瀏覽(28)
  • NestJS 的 中間件 學(xué)習(xí)

    中間件是在路由處理程序之前調(diào)用的函數(shù)。中間件函數(shù)可以訪問(wèn) 請(qǐng)求 和 響應(yīng) 對(duì)象。在程序中我們可以讓多個(gè)中間件串起來(lái)一起使用,當(dāng)多個(gè)中間件一起使用時(shí)我們可以使用 next() 調(diào)用下一個(gè)中間件。 中間件主要是可以實(shí)現(xiàn)如下功能: 執(zhí)行任何代碼 更改請(qǐng)求和響應(yīng)對(duì)象 結(jié)束

    2024年02月15日
    瀏覽(16)
  • hyperf 學(xué)習(xí) 三、中間件

    文檔地址:Hyperf 中間件的原理就是請(qǐng)求時(shí)攔截并進(jìn)行處理,再傳到對(duì)應(yīng)的回調(diào),處理返回?cái)?shù)據(jù)。 流程:request- middleware-response。 中間件在路由定義時(shí)配置。所以根據(jù)上一篇文章hyperf 學(xué)習(xí) 二、路由_lsswear的博客-CSDN博客 中注釋路由 Controller、AutoController可以配置 options。 后來(lái)查

    2024年02月12日
    瀏覽(19)
  • Python學(xué)習(xí)(3)- 消息中間件rabbitmq

    Python學(xué)習(xí)(3)- 消息中間件rabbitmq

    消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決 應(yīng)用解耦 , 異步消息 , 流量削鋒 等問(wèn)題,實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu) rabbitmq 簡(jiǎn)單模式 生產(chǎn)者: 鏈接rabbitmq 創(chuàng)建隊(duì)列 向指定的隊(duì)列中插入數(shù)據(jù) 交換機(jī)模式 發(fā)布訂閱模式 模式 模糊匹配模式

    2024年02月22日
    瀏覽(21)
  • 消息中間件Kafuka學(xué)習(xí)——初次配置使用

    消息中間件Kafuka學(xué)習(xí)——初次配置使用

    MQ本質(zhì) : 例如 ActiveMQ、RabbitMQ、RocketMQ 等中間件。采用這種模型,本質(zhì)就是將要推送的數(shù)據(jù),不在存放在當(dāng)前應(yīng)用程序的內(nèi)存中,而是將數(shù)據(jù)存放到另一個(gè)專門負(fù)責(zé)數(shù)據(jù)處理的應(yīng)用程序中,從而實(shí)現(xiàn)服務(wù)解耦。 kafuka模型 : 如果你看不懂這些概念沒關(guān)系,我會(huì)帶著大家一起梳理

    2023年04月10日
    瀏覽(24)
  • 六、用 ChatGPT 學(xué)習(xí) Eureka 中間件源碼

    目錄 一、實(shí)驗(yàn)介紹 二、背景 三、ChatGPT 幫助分析 Eureka 源碼 3.1?Eureka 源碼在哪

    2024年02月16日
    瀏覽(16)
  • Nginx 學(xué)習(xí)(十)高可用中間件的配置與實(shí)現(xiàn)

    Nginx 學(xué)習(xí)(十)高可用中間件的配置與實(shí)現(xiàn)

    調(diào)度器出現(xiàn)單點(diǎn)故障,如何解決? Keepalived實(shí)現(xiàn)了高可用集群 Keepalived最初是為L(zhǎng)VS設(shè)計(jì)的,專門監(jiān)控各服務(wù)器節(jié)點(diǎn)的狀態(tài) Keepalived后來(lái)加入了VRRP功能,防止單點(diǎn)故障 Keepalived檢測(cè)每個(gè)服務(wù)器節(jié)點(diǎn)狀態(tài),當(dāng)服務(wù)器節(jié)點(diǎn)異?;蚬ぷ鞒霈F(xiàn)故障, Keepalived將故障節(jié)點(diǎn)從集群系統(tǒng)中剔除,故

    2024年02月09日
    瀏覽(26)
  • express學(xué)習(xí)筆記5 - 自定義路由異常處理中間件

    express學(xué)習(xí)筆記5 - 自定義路由異常處理中間件

    修改router/index.js,添加異常處理中間件 完整代碼 創(chuàng)建 utils/constant:(為了方便后期統(tǒng)一維護(hù),單獨(dú)拉出來(lái)定義) 然后刷新http://localhost:8000/user ?這就完成了

    2024年02月14日
    瀏覽(30)
  • Go學(xué)習(xí)第十七章——Gin中間件與路由

    Go學(xué)習(xí)第十七章——Gin中間件與路由

    Gin框架允許開發(fā)者在處理請(qǐng)求的過(guò)程中,加入用戶自己的鉤子(Hook)函數(shù)。這個(gè)鉤子函數(shù)就叫中間件,中間件適合處理一些公共的業(yè)務(wù)邏輯,比如登錄認(rèn)證、權(quán)限校驗(yàn)、數(shù)據(jù)分頁(yè)、記錄日志、耗時(shí)統(tǒng)計(jì)等 即比如,如果訪問(wèn)一個(gè)網(wǎng)頁(yè)的話,不管訪問(wèn)什么路徑都需要進(jìn)行登錄,

    2024年02月07日
    瀏覽(20)
  • 《分布式中間件技術(shù)實(shí)戰(zhàn):Java版》學(xué)習(xí)筆記(一):搶紅包

    《分布式中間件技術(shù)實(shí)戰(zhàn):Java版》學(xué)習(xí)筆記(一):搶紅包

    數(shù)據(jù)庫(kù)建表 (1)red_send_record 記錄用戶發(fā)送了若干總金額的若干個(gè)紅包。 (2)red_detail 記錄用戶發(fā)送的紅包被分成的小紅包金額。 (3)red_rob_record 記錄用戶搶到的紅包金額。 隨機(jī)生成紅包金額 紅包金額的最小單位是分,將紅包金額放大100倍到int類型(為了方便生成隨機(jī)數(shù)),保證

    2024年02月10日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包