在确认代码没问题的前提下,出现400 Bad Request错误很大一部分原因是出自header

很多自己设置header都只是更改了'User-Agent'部分,实际上还需要注意的是'Host'部分和'Referer'部分。

'Host'一般是对应网址的域名,不设置'Host'可能会出现Invalid Host错误。

'Referer'是我最近爬某个需要登录的网站发现的问题,不添加'Referer'的话可能会出现400 Bad Request或者403 Forbidden或者返回错误页面之类的千奇百怪的错误。
有时候,即是在第一次对某个网站发送POST请求时,就可能需要带上'Referer',此时的'Referer'值一般是这个网站的网址(包括http://部分),否则POST后会直接收到错误提示。
另外,'Referer'并不是一直不变的,'Referer'的本意即是告诉服务器这个GETPOST请求是从哪个页面发出的,所以一般来说'Referer'是在一直变化的,所以需要对对应的网站抓包分析之后再用代码实现。


在尝试使用Scrapy的时候发现Scrapy会自动处理Referer的问题,对于不需要太多自定义的爬虫来说,使用Scrapy会方便许多。