Python3 之 Headers请求头

一、请求头的作用

        使用计算机网页版外卖网站的读者应该会发现这样一个现象:第一次登录外卖网页的时候会让你选择当前所在的商业圈,一旦选定好之后关闭浏览器再打开,网页就会自动定位到先前选择的商业圈。又比如,例如携程的网站,使用计算机浏览器打开的时候,页面看起来非常复杂多样,如图所示。

        但同一个网址,使用手机浏览器打开时,网址会自动发生改变,而且得到的页面竟然完全不同,如图所示。

        网站怎么知道现在是计算机浏览器还是手机浏览器在访问这个页面呢?网站怎么能记住地理位置呢?这就要归功于Headers了。Headers称为请求头,浏览器可以将一些信息通过Headers传递给服务器,服务器也可以将一些信息通过Headers传递给浏览器。电商网站常常应用的Cookies就是Headers里面的一个部分。

二、伪造请求头

        打开网址,使用Chrome的开发者工具监控这个页面的网页请求。使用Python3 的 requests 尝试获取这个网址的返回信息,可以看到,使用requests向后台发送请求以后,并没有像自己写的 Demo 项目一样直接获取到 Chrome 页面上应该出现的内容。相反,网页发现了这次请求是通过爬虫进行的。为什么网站能够知道这次是爬虫访问而不是正常的浏览器访问呢?

        为什么网站会知道是”爬虫“请求?现在把视角切换到网站的后台,看一看浏览器访问网站和 requests 访问网站有什么不同。使用浏览器访问网站的时候,网站可以看到一个名称为Headers(请求头)的东西,它的内容如图所示。

        使用Chrome访问的情况下请求头里面的内容和使用requests访问服务器时请求头里面的内容。它们不论在项数还是在内容上,差异都很大。更有甚者,在使用requests访问的时候,User-Agent这一项的内容直接就是“python-requests”,如图所示。网站得到这一项,立刻就知道是爬虫了。
        为了解决这个问题,就需要给爬虫“换头”。把浏览器的头安装到爬虫的身上,这样网站就不知道谁是谁了。要换头,首先就需要知道浏览器的头是什么样的。因此需要在Chrome浏览器开发者工具的“Network”选项卡的Request Headers里面观察这一次请求的请求头。

        在requests里面,设置请求头的参数名称为“headers”,它的值是一个字典。带有请求头的请求,使用requests的发送格式为:

html = requests.get(url, headers=字典).content.decode()

html = requests.post(url, json=xxx, headers=字典).content.decode()

        代码中的字典就对应了浏览器中的请求头。在爬虫里面创建一个字典,将Chrome的请求头的内容复制进去,并调整好格式,发起一个带有Chrome请求头的爬虫请求,可以发现请求获得成功,虽然对于某些网站,在请求头里面只需要设置User-Agent就可以正常访问了,但是为了保险起见,还是建议把所有项目都带上,这样可以让爬虫更“像”浏览器。

--------------------------------------

没有自由的秩序和没有秩序的自由,同样具有破坏性。

--------------------------------------

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值