Scrapy 增加随机请求头 user_agent

原文:

  1. 为什么要增加随机请求头:更好地伪装浏览器,防止被 Ban。
  2. 如何在每次请求时,更换不同的 user_agent,Scrapy 使用 Middleware 即可

    Spider 中间件 (Middleware) 下载器中间件是介入到 Scrapy 的 spider 处理机制的钩子框架,可以添加代码来处理发送给 Spiders 的 response 及 spider 产生的 item 和 request。

    官网说明在这里:Spider Middleware

添加 middleware 的步骤:
1)创建一个中间件 (RandomAgentMiddleware)
设置请求时使用随机 user_agent

2) 在 settings.py 中配置,激活中间件。
网上文章基本上转的都是下面这段代码:

  1. 这段代码中的疑问:
    1)自己写的 Middleware 放在哪个目录下
    2)settings.py 中的 MIDDLEWARES 的路径是如何定

    1)
    自己编写的中间件放在 items.py 和 settings.py 的同一级目录。

    2)
    settings.py 中的 MIDDLEWARES 的路径,应该是:

    yourproject.middlewares(文件名).middleware类

    如果你的中间件的类名和文件名都使用了 RandomUserAgentMiddleware,那这个路径应该写成:

    xiaozhu.RandomUserAgentMiddleware.RandomUserAgentMiddleware

    这一点,大家可以比较引入自己写的 pipelines,只不过 Scrapy 框架本身为我们创建了一个 pipelines.py

    3) 在 middleware 中间件中导入 settings 中的 USER_AGENT_LIST
    我使用的是 mac,因为 settings.py 与 RandomUserAgentMiddleware 在同一级目录

    from settings import USER_AGENT_LIST

Scrapy 增加随机 user_agent 的完整代码:

from settings import USER_AGENT_LIST

import random
from scrapy import log

class RandomUserAgentMiddleware(object):
    def process_request(self, request, spider):
        ua  = random.choice(USER_AGENT_LIST)
        if ua:
            request.headers.setdefault(‘User-Agent‘, ua)

settings.py 中:

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/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "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/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "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"
]
DOWNLOADER_MIDDLEWARES = {
    ‘xiaozhu.user_agent_middleware.RandomUserAgentMiddleware‘: 400,
    ‘scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware‘: None,
}

代码 Github: https://github.com/ppy2790/xiaozhu

时间: 2024-11-02 20:52:50

Scrapy 增加随机请求头 user_agent的相关文章

设置随机请求头和使用代理

# -*- coding: utf-8 -*- """ 所有请求头的USER_AGENTS网址 http://www.useragentstring.com/pages/useragentstring.php?name=All """ import json import random import requests USER_AGENTS = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleW

构造多种请求头信息,并随机抽取信息

# 构造多种请求头信息,并随机抽取信息 构造多个请求头信息使用random随机抽取信息话不多说,直接上代码 import random # 构造请求头信息,随机抽取信息agent1 = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'agent2 = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) C

Scrapy 设置随机 User-Agent

方式一:在每个 Spider中设置(针对单个Spider) class TencentSpider(scrapy.Spider): name = 'tencent' allowed_domains = ['hr.tencent.com'] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/

如何使用multipart/form-data格式上传文件(POST请求时,数据是放在请求体内,而不是请求头内,在html协议中,用 “\r\n” 换行,而不是 “\n”)

在网络编程过程中需要向服务器上传文件.Multipart/form-data是上传文件的一种方式. Multipart/form-data其实就是浏览器用表单上传文件的方式.最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器. 表单形式上传附件 具体的步骤是怎样的呢? 首先,客户端和服务器建立连接(TCP协议). 第二,客户端可以向服务器端发送数据.因为上传文件实质上也是向服务器端发送请求. 第三,客户端按照符合“m

HTTP 请求头中的 X-Forwarded-For

我一直认为,对于从事 Web 前端开发的同学来说,HTTP 协议以及其他常见的网络知识属于必备项.一方面,前端很多工作如 Web 性能优化,大部分规则都跟 HTTP.HTTPS.SPDY 和 TCP 等协议的特点直接对应,如果不从协议本身出发而是一味地照办教条,很可能适得其反.另一方面,随着 Node 的发展壮大,越来越多的前端同学开始写服务端程序,甚至是框架( ThinkJS 就是这样由前端工程师开发,并有着众多前端工程师用户的 Node 框架),掌握必要的网络知识,对于服务端程序安全.部署.

HTTP 协议 请求头详解

HTTP由两部分组成:请求和响应.当你在Web浏览器中输入一个URL时,浏览 器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息.当服务器收到这个请求时将返回一个响应,该响应包括与该请求 相关的信息以及位于指定URL(如果有的话)的数据.直到浏览器解析该响应并显示出网页(或其他资源)为止. HTTP请求 HTTP请求的格式如下所示: <request-line><headers><blank line>[<request-bod

[转]Composer 中国镜像解析file_get_contents模仿浏览器头(user_agent)获取数据

本篇文章是对file_get_contents模仿浏览器头(user_agent)获取数据进行了详细的分析介绍,需要的朋友参考下 什么是user agentUser Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等.网站可以通过判断不同UA来呈现不同的网站,例如手机访问和PC访问显示不同的页面.PHP在用file_get_contents函数采集网站时,有时会明明用浏览器

spring mvc处理ios 请求头不全时空参 无法解析的问题处理

ios前端比较懒~囧~~,还有已安装的app用户 ,不愿意更新等问题 导致 请求头无法补全给服务端springmvc发送过来.....悲剧了 只能服务端自己处理这个不全的http请求空参无法解析的问题 尝试处理方法 1     增加springmvc过滤器对请求进行过滤(失败) 测试发现在访问控制层匹配请求地址之前就已经报错,应该是dispatcher那里出了问题 虽然失败, 把代码配置贴出来~~ applicationContext.xml <mvc:interceptors>      

Hessian客户端向服务端发送请求头

Hessian客户端向服务端发送数据 场景:项目日志Token处理,即用户发送一个请求时生成一个日志Token,该Token从各个服务之间传递,并使用该Token记录日志,直至请求结束.可以根据该Token定位所有日志. 问题:由于目前项目使用Hessian协议,所有Token必须使用Hessian传递.查阅相关资料,发现可以请求头传递数据. 解决方法:定义与线程相关的请求头上下文,在客户端发送请求之前,增加请求头.服务端获取请求时,从请求中解决请求头,并放入请求头上下文中,供服务端使用. 实现