当我们使用python的第三方库例如 requests 和 scrapy 发送HTTP请求时,遵从了HTTP协议的规定能帮助我们得到比较好的网页抓取结果。在HTTP协议中,请求头是发送给服务器的一段文本信息,用于描述请求参数、客户端类型、要求的文件类型等等。在构建爬虫时,设置正确的请求头信息是非常重要的,可以避免被反爬虫机制阻拦,同时可以提高爬虫的效率。下面是如何设置请求头信息的步骤:
在使用爬虫之前第一步是查看被爬取网站的请求头信息,可以使用 Chrome 或 FireFox 浏览器的检查元素工具来查看。
在获得了网站请求头信息后就可以构建请求头信息了。其中最重要的就是 User-Agent
、Referer
和 Cookie
这三个信息。
这个信息表示请求的头部包含着关于这台客户端的信息。可以用正确的客户端信息来伪装成一个真实的错误。User-Agent的格式很多,通常使用的是以浏览器名开头的字符串。例如使用 chrome 浏览器的请求头如下:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
这个信息表示请求头应当包括一个 HTTP 引用头,指示请求是从哪里发送的。例如,当爬取网站的文章时,请求头中可以在 Referer 这个字段中填写文章所在的页面 URL,表示请求是从这个页面中发送过来的。
这个信息表示请求头中应当包含 Cookies,注意不同复杂网站需要不同的 Cookies 来判断身份,如果没有 Cookie 就可能不能得到正确的结果。
在 Python 爬虫中,可以通过 requests 和 scrapy 库实现设置请求头信息。如果使用 requests 库发送 HTTP 请求,只需要在使用 requests.get 或 requests.post 方法时传递 headers 参数即可。例如下面的代码:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Referer': 'https://www.baidu.com/',
'Cookie': 'user_token=xxxxxx; session_token=xxxxxx;'
}
response = requests.get(url, headers=headers)
如果使用 scrapy 爬虫,可以在 spider 中重载 start_requests
方法,实现设置请求头的目的。例如下面的代码:
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
def start_requests(self):
url = 'https://www.example.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Referer': 'https://www.baidu.com/',
'Cookie': 'user_token=xxxxxx; session_token=xxxxxx;'
}
yield scrapy.Request(url=url, headers=headers, callback=self.parse)
def parse(self, response):
# 解析响应信息
上述代码中,start_requests
方法中通过 scrapy.Request 方法生成一个请求,将请求头信息传递到 header 参数中,然后调用回调函数 self.parse
对响应信息进行解析。
综上所述,通过以上步骤,就能够实现设置请求头信息的效果,提高数据爬取的成功率。
本文链接:http://task.lmcjl.com/news/6851.html