【Scrapy框架设置UA池与代理池】 񊺟

原文:
http://blog.gqylpy.com/gqy/367

先来张Scrapy框架图压压惊



下载中间件(Downloader Middlewares)是位于Scrapy引擎和下载器之间的一层组件。

它的作用是:

  1. 在引擎将请求传递给下载器的过程中,下载中间件可以对请求进行一系列的处理。比如设置User-Agent、设置代理IP等。
  2. 在下载器将Response传递给引擎的过程中,下载中间件可以对响应进行一系列的处理。比如进行gzip解压等。

下面将使用下载中间件来实现UA池与代理池



我们一般使用下载中间件处理请求,一般会对请求设置随机的User-Agent、代理IP。目的在于防止被爬取网站的反爬虫策略。

基本步骤如下:

  1. 在中间件中拦截请求.
  2. 对拦截到的请求进行篡改User-Agent和设置代理IP.
  3. 在配置文件中启用下载中间件DOWNLOADER_MIDDLEWARES.

中间件文件middlewares.py代码如下:

import random
from fake_useragent import UserAgent  # UA库,我们这里就使用它来做UA池

# 这个便是下载中间价
class BlogDownloaderMiddleware(object):

    # 我们先定义好代理池
    http = ['http://218.60.8.83:3129', 'http://59.44.247.194:9797']
    https = ['https://85.62.30.211:8080', 'https://101.248.64.68:8080']
    # http://www.goubanjia.com 提供很好的代理ip

    def process_request(self, request, spider):
        """
        这是下载中间件中 拦截请求 的方法
        :param request: 拦截到的请求
       """
       # print(request)  # <GET https://www.baidu.com/s?wd=ip>

       ua = UserAgent(use_cache_server=False).random  # 生成随机UA
       request.headers['User-Agent'] = ua  # 将生成的UA写入请求头中

       # 判断请求是超文本传输协议,还是安全套接字超文本传输协议,并对其使用对应的代理池
       request.meta['proxy'] = random.choice(getattr(self, request.url.split(':')[0]))

       return None

    def process_response(self, request, response, spider):
       """这是下载中间件中 拦截响应 的方法"""
       print(response)  # <200 https://www.baidu.com/s?wd=ip>
       return response

最后在配置文件settings.py中启用下载中间件:

# 开启下载中间件
DOWNLOADER_MIDDLEWARES = {
   'blog.middlewares.BlogDownloaderMiddleware': 543,
}

原文:
http://blog.gqylpy.com/gqy/367

原文地址:https://www.cnblogs.com/mypath1/p/11405162.html

时间: 2024-07-30 07:02:08

【Scrapy框架设置UA池与代理池】 񊺟的相关文章

【Scrapy框架设置UA池与代理池】 -- 2019-08-08 17:20:36

原创: http://106.13.73.98/__/142/ 先来张Scrapy框架图压压惊 下载中间件(Downloader Middlewares)是位于Scrapy引擎和下载器之间的一层组件. 它的作用是: 在引擎将请求传递给下载器的过程中,下载中间件可以对请求进行一系列的处理.比如设置User-Agent.设置代理IP等. 在下载器将Response传递给引擎的过程中,下载中间件可以对响应进行一系列的处理.比如进行gzip解压等. 下面将使用下载中间件来实现UA池与代理池 我们一般使用

【Scrapy框架设置UA池与代理池】 -- 2019-08-08 18:00:10

原文: http://106.13.73.98/__/142/ 先来张Scrapy框架图压压惊 下载中间件(Downloader Middlewares)是位于Scrapy引擎和下载器之间的一层组件. 它的作用是: 在引擎将请求传递给下载器的过程中,下载中间件可以对请求进行一系列的处理.比如设置User-Agent.设置代理IP等. 在下载器将Response传递给引擎的过程中,下载中间件可以对响应进行一系列的处理.比如进行gzip解压等. 下面将使用下载中间件来实现UA池与代理池 我们一般使用

10 UA池和代理池在Scrapy中的应用

下载中间件简介 在Scrapy中,引擎和下载器之间有一个组件,叫下载中间件(Downloader Middlewares).因它是介于Scrapy的request/response处理的钩子,所以有2方面作用: (1)引擎将请求传递给下载器过程中,下载中间件可以对Requests进行一系列处理.比如设置请求的 User-Agent,设置代理ip等 (2)在下载器完成将Response传递给引擎中,下载中间件可以对Responses进行一系列处理.比如进行gzip解压等. 爬虫中,主要使用下载中间

14.UA池和代理池

14.UA池和代理池 今日概要 scrapy下载中间件 UA池 代理池 今日详情 一.下载中间件 先祭出框架图: 下载中间件(Downloader Middlewares) 位于scrapy引擎和下载器之间的一层组件. - 作用: (1)引擎将请求传递给下载器过程中, 下载中间件可以对请求进行一系列处理.比如设置请求的 User-Agent,设置代理等 (2)在下载器完成将Response传递给引擎中,下载中间件可以对响应进行一系列处理.比如进行gzip解压等. 我们主要使用下载中间件处理请求,

网络爬虫之scrapy框架详解,scrapy框架设置代理

twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发. twisted是什么以及和requests的区别: request是一个python实现的可以伪造浏览器发送Http请求的模块,它封装了socket发送请求 twisted是基于时间循环的异步非阻塞的网络框架,它也封装了socket发送请求,但是他可以单线程的完成并发请求. twisted的特点是: 非阻塞:不等待

UA池和代理池

一.概要 scrapy下载中间件 UA池 代理池 二. 详情 1.框架图: 下载中间件(Downloader Middlewares)位于scrapy引擎和下载器之间的一层组件 2.作用: (1). 引擎将请求传递给下载器过程中,下载中间件可以对请求进行一系列处理,比如设置请求的User-Agent, 设置代理等 (2). 在下载器完成将Response传递给引擎中,下载中间件可以对响应进行一系列处理,比如进行gzip解压等 我们主要使用下载中间件处理请求,一般会对请求设置随机的User-Age

scrapy框架设置代理

网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解决此问题在scrapy中使用代理,有两种使用方式 1.使用中间件2.直接设置Request类的meta参数 下面依次简要说明下如何使用 方式一:使用中间件要进行下面两步操作 在文件 settings.py 中激活代理中间件ProxyMiddleware在文件 middlewares.py 中实现类P

UA池和代理池(IP)

UA池(每一次请求采用池中的随机UA) a) 在中间件类中进行导包 from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware b)封装一个基于UserAgentMiddleware的类,且重写该类 例: middleware.py from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware import

网络爬虫之scrapy框架设置代理

前戏 os.environ()简介 os.environ()可以获取到当前进程的环境变量,注意,是当前进程. 如果我们在一个程序中设置了环境变量,另一个程序是无法获取设置的那个变量的. 环境变量是以一个字典的形式存在的,可以用字典的方法来取值或者设置值. os.environ() key字段详解 windows: os.environ['HOMEPATH']:当前用户主目录. os.environ['TEMP']:临时目录路径. os.environ[PATHEXT']:可执行文件. os.en