默认请求头
命令行执行,新建爬虫
scrapy startproject myspidercd myspider scrapy genspider scrapy_spider httpbin.org
我们通过对 https://httpbin.org/get?show_env=1 的请求,查看本次请求的浏览器信息,可以打开看一看是否是自己的浏览器信息
将返回的文本复制到 https://www.json.cn/ 格式化成便于查看的json格式,下面操作亦然,不再赘述。
修改请求头
既然这样的话,那我们修改下请求头,达到伪造的效果
打开下面的链接,选一个自己喜欢的请求头
http://www.useragentstring.com/pages/useragentstring.php?name=Chrome
这里使用chrome浏览器请求头
再次访问,发现我们的请求头已经成功更换
''User-Agent'':''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'',
方式三:链接设置
此方法对单个链接生效, 只是此次请求的这个链接享受
在Request方法中设置headers参数
方法四:中间件设置
此方法可以从整个项目中去修改请求头的设置规则,变化多端,不同的写法,可以配置出不同的设置方式,下面是一个比较简单的示例
我们参考scrapy默认处理请求头的中间件
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
编写中间件
作用优先级
如果作如下设置
# settings.pyUSER_AGENT = ''settings''
# scrapy_spider.pycustom_settings = { ''USER_AGENT'': ''custom_settings'', }headers={''User-Agent'': ''header''}
运行效果为:
''User-Agent'':''header''
注释掉headers
''User-Agent'':''custom_settings''
注释掉custom_settings
''User-Agent'':''custom_settings''
注释掉settings
''User-Agent'':''Scrapy/1.1.2 (+http://scrapy.org)''
可见优先级为:
headers > custom_settings > settings.py > Scrapy默认
注意
注意User-Agent参数的写法
headers={''User-Agent'': USER_AGENT})
如果写错了,很可能发生奇怪的事情
headers={''User_Agent'': USER_AGENT}
请求头中多了Scrapy…
''User-Agent'':''Scrapy/1.1.2 (+http://scrapy.org),Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'',
其实,很好区分:
User-Agent: 浏览器请求头参数,html代码中经常用-
USER_AGENT: python变量
建议:
每次写浏览器参数,如果怕写错就打开自己的浏览器,随便测试一个页面,从里边复制
作为从入门到实战的我,踩过不少坑,此文做了简单的总结,也分享了几个比较实用的网站。希望此文的分享能给大家提供一个少走弯路的捷径,那么此文的价值也就体现了。