Scrapy爬取gol.gg站点返回None,css选择器失效如何解决
问题根因
目标站点对请求头的User-Agent字段做了爬虫识别校验,Scrapy默认发送的User-Agent包含Scrapy标识,会被站点拦截,虽然响应状态码为200,但返回的是无表格数据的空白页面,因此CSS选择器无法匹配到对应元素。
解决方案
- 替换默认的爬虫标识User-Agent
两种修改方式二选一即可:- 在Scrapy项目的
settings.py配置文件中添加如下配置:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'- 直接在爬虫代码中自定义请求头,修改后的完整爬虫代码如下:
import scrapy class QuotesSpider(scrapy.Spider): name = "equipes" def start_requests(self): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36', 'Referer': 'https://gol.gg/' } url = 'https://gol.gg/teams/list/season-ALL/split-ALL/tournament-CBLOL%20Split%201%202020/' yield scrapy.Request(url, headers=headers, callback=self.parse) def parse(self, response): yield {'teste': response.css('tbody tr td.tablesaw-cell-persist').get()} - 在Scrapy项目的
- 验证响应内容正确性
调试阶段可以先将响应源码保存到本地文件,确认返回内容与浏览器端一致后再调试选择器,代码示例:def parse(self, response): # 保存响应内容排查 with open('gol_resp.html', 'w', encoding='utf-8') as f: f.write(response.text) yield {'teste': response.css('tbody tr td.tablesaw-cell-persist').get()}
内容的提问来源于stack exchange,提问作者Edmundo Pires
相关产品推荐
相关产品推荐

