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

Scrapy爬虫返回空标题与错误URL,如何解决?

解决Scrapy爬虫返回空标题和错误URL的问题

你的问题出在XPath表达式的层级错误上。当前循环中product已经定位到了//ul[@class='link-container']/li节点,你在子XPath里又多加了一层li,导致找不到目标的a标签——标题自然为空,URL获取不到后,response.urljoin(None)会默认返回当前页面的URL,所以结果全部不正确。

修正后的代码如下:

import scrapy

class SpecialOffersSpider(scrapy.Spider):
    name = "special_offers"
    allowed_domains = ["m.alibaba.com"]
    start_urls = ["https://m.alibaba.com/sitemap/showroom/showroom-A.html"]

    def parse(self, response):
        # 遍历每个li节点,此时product就是单个li元素
        for product in response.xpath("//ul[@class='link-container']/li"):
            yield {
                # 直接在当前li下找a标签的文本,移除多余的li层级
                'title': product.xpath(".//a/text()").get().strip(),
                # 同理,直接取a标签的href属性
                'url': response.urljoin(product.xpath(".//a/@href").get())
            }

关键修正说明:

  • 移除子XPath中的多余li:原来的.//li/a改成.//a,因为当前product本身就是li节点,内部直接包含a标签,无需再嵌套查找li。
  • 给title添加.strip():可以去除文本前后的空格、换行符,让结果更整洁。

如果仍有问题,建议用Scrapy Shell快速调试验证:

  1. 终端输入scrapy shell https://m.alibaba.com/sitemap/showroom/showroom-A.html
  2. 执行response.xpath("//ul[@class='link-container']/li/a/text()").getall(),查看是否能拿到所有标题文本,确认页面结构是否和预期一致。

内容的提问来源于stack exchange,提问作者Calvin Fermin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:16:26