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快速调试验证:
- 终端输入
scrapy shell https://m.alibaba.com/sitemap/showroom/showroom-A.html - 执行
response.xpath("//ul[@class='link-container']/li/a/text()").getall(),查看是否能拿到所有标题文本,确认页面结构是否和预期一致。
内容的提问来源于stack exchange,提问作者Calvin Fermin
相关产品推荐
相关产品推荐

