首页 > 其他分享 >中间件

中间件

时间:2024-03-03 22:01:10浏览次数:19  
标签:like Chrome Mozilla 中间件 spider Gecko 536.3

代码

# Define here the models for your spider middleware
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
import random

from scrapy import signals

# useful for handling different item types with a single interface
from itemadapter import is_item, ItemAdapter


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

    @classmethod
    def from_crawler(cls, crawler):
        # This method is used by Scrapy to create your spiders.
        s = cls()
        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
        return s

    def process_spider_input(self, response, spider):
        # Called for each response that goes through the spider
        # middleware and into the spider.

        # Should return None or raise an exception.
        return None

    def process_spider_output(self, response, result, spider):
        # Called with the results returned from the Spider, after
        # it has processed the response.

        # Must return an iterable of Request, or item objects.
        for i in result:
            yield i

    def process_spider_exception(self, response, exception, spider):
        # Called when a spider or process_spider_input() method
        # (from other spider middleware) raises an exception.

        # Should return either None or an iterable of Request or item objects.
        pass

    def process_start_requests(self, start_requests, spider):
        # Called with the start requests of the spider, and works
        # similarly to the process_spider_output() method, except
        # that it doesn’t have a response associated.

        # Must return only requests (not items).
        for r in start_requests:
            yield r

    def spider_opened(self, spider):
        spider.logger.info("Spider opened: %s" % spider.name)


class MiddleproDownloaderMiddleware:
    #UA池
    user_agent_list = [
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "
        "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "
        "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "
        "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "
        "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "
        "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "
        "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "
        "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "
        "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "
        "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
    ]
    # 代理池
    PROXY_http = [
        '153.180.102.104:80',
        '195.208.131.189:56055',
    ]
    PROXY_https = [
        '120.83.49.90:9000',
        '95.189.112.214:35508',
    ]
    # 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.
    # 拦截请求
    def process_request(self, request, spider):
        #UA伪装
        request.headers['User-Agent'] = random.choice(self.user_agent_list)

        #为了验证代理的操作是否生效
        request.meta['proxy'] = 'http://39.108.254.31:80'
        return None
    # 拦截所有的响应
    def process_response(self, request, response, spider):
        return response
    #拦截发生异常的请求
    def process_exception(self, request, exception, spider):
        if request.url.split(':')[0] == 'http':
            # 代理
            request.meta['proxy'] = 'http://'+random.choice(self.PROXY_http)
        else:
            request.meta['proxy'] = 'https://'+random.choice(self.PROXY_https)
        return request  #将修正之后的请求对象进行重新的请求发送
import scrapy


class MiddleSpider(scrapy.Spider):
    name = "middle"
    allowed_domains = ["www.xxx.com"]
    start_urls = ["https://www.baidu.com/s?ie=UTF-8&wd=%E7%AB%99%E9%95%BF%E7%B4%A0%E6%9D%90"]

    def parse(self, response):
        page_text = response.text
        with open('baidu.html', 'w', encoding='utf-8') as fp:
            fp.write(page_text)

笔记

中间件:
    - 下载中间件:处于引擎和下载器之间
        - 作用:批量拦截到整个工程中所有的请求和响应
        - 拦截请求:
            - UA伪装
            - 代理IP
        - 拦截响应:
            - 篡改响应数据,响应对象

    - 爬虫中间件:处于引擎和爬虫之间

在settings文件中开启下载中间件

标签:like,Chrome,Mozilla,中间件,spider,Gecko,536.3
From: https://www.cnblogs.com/lin513/p/18050840

相关文章

  • FastAPI系列:中间件
    中间件介绍中间件是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作装饰器版中间件1.必须使用装饰器@app.middleware("http"),且middleware_type必须为http2.中间件参数:request,call_next,且call_next它将接收request作为参数@app.middleware("h......
  • gin中间件&控制器
    中间件Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。通俗的讲:中间件就是匹配路由前和匹配路由完成后执行的一系列操作路由中间件Gi......
  • 在后端开发中,中间件的作用是什么
    在后端开发中,中间件(Middleware)是一种软件架构模式,它在应用的请求响应周期中起到承上启下的作用。中间件的主要作用包括但不限于以下几个方面:请求处理流程控制:中间件可以拦截应用程序中的HTTP请求和响应,在请求到达实际处理程序之前或之后执行特定操作,如身份验证、授权、日志记录......
  • Go模仿gin自定义中间件
    packagemainimport( "fmt" "net/http")//中间件函数类型typeMiddlewareFuncfunc(http.HandlerFunc)http.HandlerFunc//自定义中间件1funcLoggerMiddleware(nexthttp.HandlerFunc)http.HandlerFunc{ returnfunc(whttp.ResponseWriter,req*ht......
  • 分布式系统---关键技术“消息中间件”
    消息中间件是一种用于构建分布式系统的软件基础设施,提供了一种异步的,可靠的,可伸缩的消息传递机制。 提高系统性能首先考虑的是数据库的优化,但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所有我们一般会尽量把流量都挡在数据库之前。不管是无限的横向扩展服务器,还是纵向......
  • 想设计一个高并发的消息中间件前,先熟悉一下这些知识点
    本文分享自华为云社区《面试必问|如何设计一款高并发的消息中间件?》,作者:冰河。消息中间件涉及的知识点要想设计一个具有高并发的消息中间件,那么首先就要了解下消息中间件涉及哪些具体的知识点。通常,设计一个良好的消息中间件最少需要满足如下条件:生产者、消费者模型。支持......
  • iris中的中间件调用顺序
    有一篇文章写得不错:「Go框架」深入理解web框架的中间件运行机制-知乎(zhihu.com)我这里只是写一个简单的demo来观察一下,代码如下:packagemainimport("fmt""github.com/kataras/iris/v12""github.com/kataras/iris/v12/middleware/logger""github.co......
  • FolkMQ "单线程"消息中间件 v1.0.32 发布
    简介采用“单线程”+“多路复用”+"内存运行"+"快照持久化"+"Broker集群模式"(可选)基于Socket.D网络应用协议开发。全新设计,自主架构!角色功能生产端发布消息(Qos0、Qos1)、定时消息(Qos0、Qos1)、可过期消息(Qos0、Qos1)消费端订阅、取消订阅消费......
  • 超简单!手把手实现axum简易中间件
    axum是Rust语言tokio生态中的重要一环,以轻量、模块化、易用而闻名于世。它的中间件系统集成自另一个叫tower的框架,这就意味着如果我们要写axum的中间件的话,就得了解一下这个tower的各个核心概念,并学习它的用法。但是,很多时候我们可能只是想写一点简单的小工具,为了小需求去学习一个......
  • 第六十四天 csrf, auth,中间件插拔解释
    一、csrf跨站请求伪造1.简介 钓鱼网站:假设是一个跟银行一模一样的网址页面用户在该页面上转账 账户的钱会减少但是受益人却不是自己想要转账的那个人2.模拟一台计算机上两个服务端不同端口启动钓鱼网站提交地址改为正规网站的地址deftransfer(request):ifreques......