如何在 Scrapy 中设置请求头以避免反爬虫?

2023-04-17 00:00:00 设置 请求 爬虫

在 Scrapy 中设置请求头可以通过在 Spider 中的 Request 中传递 headers 参数实现。具体步骤如下:

  1. 在 Spider 中的 Request 中添加 headers 参数,如下所示:
import scrapy

class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        urls = ['http://www.pidancode.com']
        for url in urls:
            yield scrapy.Request(url=url, headers={
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
                'Referer': 'http://www.pidancode.com',
                'Host': 'www.pidancode.com'
            }, callback=self.parse)

    def parse(self, response):
        # Do something
        pass

在上述代码中,headers 参数中包含了 User-Agent、Referer 和 Host 三个信息,这三个信息可以通过浏览器进行抓取得到,具有一定的反爬虫效果。

其中,User-Agent 是浏览器发送给服务器的头部信息。服务器可以根据 User-Agent 判断是否是人类在访问网站,以及浏览器的版本号、操作系统等信息。

Referer 是页面跳转前的来源页面,可以模拟人类在浏览网页时的行为。有一些网站会根据前一个页面的地址来判断网页的合法性,所以在进行页面跳转时需要添加 Referer 头部信息。

Host 是服务器的域名地址。在进行 HTTP 请求时需要指定 Host 头部信息,以便服务器能够正确地处理请求。

  1. 创建一个 Spider,并运行 Scrapy 爬虫
scrapy startproject myproject
cd myproject
scrapy genspider myspider pidancode.com
scrapy crawl myspider

上述代码会创建一个名为 myproject 的 Scrapy 工程,并在该工程中创建一个名为 myspider 的 Spider,该 Spider 会访问 pidancode.com 网站并打印出网页源码。

相关文章