关键词

如何设置爬虫的请求头信息?

当我们使用python的第三方库例如 requests 和 scrapy 发送HTTP请求时,遵从了HTTP协议的规定能帮助我们得到比较好的网页抓取结果。在HTTP协议中,请求头是发送给服务器的一段文本信息,用于描述请求参数、客户端类型、要求的文件类型等等。在构建爬虫时,设置正确的请求头信息是非常重要的,可以避免被反爬虫机制阻拦,同时可以提高爬虫的效率。下面是如何设置请求头信息的步骤:

1. 查看网站请求头信息

在使用爬虫之前第一步是查看被爬取网站的请求头信息,可以使用 Chrome 或 FireFox 浏览器的检查元素工具来查看。

2. 构建请求头信息

在获得了网站请求头信息后就可以构建请求头信息了。其中最重要的就是 User-AgentRefererCookie 这三个信息。

User-Agent

这个信息表示请求的头部包含着关于这台客户端的信息。可以用正确的客户端信息来伪装成一个真实的错误。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

Referer

这个信息表示请求头应当包括一个 HTTP 引用头,指示请求是从哪里发送的。例如,当爬取网站的文章时,请求头中可以在 Referer 这个字段中填写文章所在的页面 URL,表示请求是从这个页面中发送过来的。

Cookie

这个信息表示请求头中应当包含 Cookies,注意不同复杂网站需要不同的 Cookies 来判断身份,如果没有 Cookie 就可能不能得到正确的结果。

3. 在代码中添加请求头信息

在 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

展开阅读全文