You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy中Response.follow无法跟进链接返回空结果的问题

解决思路

1. 先验证parse函数是否能抓取到目标链接

在parse函数里添加打印逻辑,确认选择器是否真的拿到了有效链接:

def parse(self, response):
    print(response.url)
    # 一次性获取所有链接并打印
    links = response.css('.collection-link::attr(href)').getall()
    print(f"抓取到的链接数量:{len(links)}")
    print(f"具体链接:{links}")
    for link in links:
        yield response.follow(link, callback=self.parse_remedios)

如果打印结果是空列表,说明.collection-link::attr(href)这个选择器在起始页面里根本找不到对应元素,自然不会触发后续的回调函数。

2. 检查follow的链接有效性

有些网站的href可能是相对路径、空值、锚点(#)或者JavaScript伪链接,response.follow会自动忽略无效请求。要确认打印出的每个链接都是指向商品详情页的有效URL。

3. 查看Scrapy日志排查请求状态

运行爬虫时开启日志记录(比如执行scrapy crawl remedios --logfile=spider.log),查看日志里是否有parse_remedios对应的请求记录:

  • 如果没有请求记录:说明选择器没抓到链接,或者链接被过滤
  • 如果有请求但状态码异常(比如404、503、302):可能是链接无效,或者请求被网站反爬拦截

4. 核对allowed_domains配置

如果follow的链接域名不在allowed_domains列表里,Scrapy会自动过滤该请求。确认抓取到的链接域名完全匹配www.drogariaspachecopacheco.com.br,如果存在子域名差异,需要更新allowed_domains。

5. 添加浏览器请求头避免反爬拦截

很多网站会识别Scrapy默认的User-Agent并拦截请求,可以在settings.py里配置:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'

或者在follow请求里单独设置headers:

yield response.follow(link, callback=self.parse_remedios, headers={'User-Agent': '你的浏览器UA'})

6. 验证回调页面的结构是否匹配选择器

即使直接用parse_remedios做主解析能拿到数据,也不代表follow跳转后的页面结构完全一致。可以在parse_remedios里先打印页面开头内容,确认页面是否正常加载:

def parse_remedios(self, response):
    # 打印页面前500个字符,确认内容是否正确
    print(response.text[:500])
    resultado = response.css('.container-fluid')
    yield {
        'nome' : resultado.css('.productName::text').get(),
        'preco' : resultado.css('.skuBestPrice::text').get() ,
        'link' : response.url,
        'sku' : resultado.css('.skuReference::text').get()
    }

内容的提问来源于stack exchange,提问作者Plinio Leal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:10:33