如何在 Scrapy 中设置请求头以避免反爬虫?
在 Scrapy 中设置请求头可以通过在 Spider 中的 Request 中传递 headers 参数实现。具体步骤如下:
- 在 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 头部信息,以便服务器能够正确地处理请求。
- 创建一个 Spider,并运行 Scrapy 爬虫
scrapy startproject myproject
cd myproject
scrapy genspider myspider pidancode.com
scrapy crawl myspider
上述代码会创建一个名为 myproject 的 Scrapy 工程,并在该工程中创建一个名为 myspider 的 Spider,该 Spider 会访问 pidancode.com 网站并打印出网页源码。
相关文章