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

Scrapy嵌套站点地图Spider未按预期工作问题排查

排查Scrapy SitemapSpider未抓取目标链接的问题

看起来你的问题核心大概率是sitemap_rules的正则匹配不精准,咱们一步步来拆解和修复:

1. 先修正正则匹配规则

你的目标链接是https://flatinfo.ru/arenda_kvartir.asp?id=867039,而你写的规则是('/arenda_kvartir/', 'parsed')——注意这里的规则是匹配包含/arenda_kvartir/(末尾带斜杠)的路径,但目标链接的路径是/arenda_kvartir.asp(没有斜杠,是.asp后缀),所以正则根本匹配不上!

把规则改成匹配包含关键词的路径(不管后缀或斜杠),或者更精准匹配.asp链接:

sitemap_rules = [
    ('arenda_kvartir', 'parsed'),  # 匹配包含该关键词的所有链接
    ('prodaja_kvartir', 'parsed'),
    # 或者更精准写法:('/arenda_kvartir\.asp', 'parsed')
]

2. 确认嵌套站点地图是否被正确跟进

Scrapy的SitemapSpider默认会自动解析主sitemap里包含的子sitemap链接,但你可以打开DEBUG级别的日志来验证:

  • 在settings.py里设置LOG_LEVEL = 'DEBUG'
  • 运行爬虫时,查看日志里是否有类似Processing sitemap: https://flatinfo.ru/xxx_sitemap.xml的条目,如果没有,说明主sitemap里的子链接可能没被识别,这时候可以手动把所有子sitemap链接加到sitemap_urls里试试:
sitemap_urls = [
    'https://flatinfo.ru/sitemap.xml',
    # 比如如果主sitemap里有子链接,手动补充
    'https://flatinfo.ru/sitemap_arenda_kvartir.xml',
    'https://flatinfo.ru/sitemap_prodaja_kvartir.xml',
]

3. 检查robots.txt限制

有些网站会禁止抓取sitemap或者特定路径,你可以在爬虫里禁用robots协议验证:
要么在settings.py里全局设置:

ROBOTSTXT_OBEY = False

要么在Spider类里单独配置:

custom_settings = {
    'ROBOTSTXT_OBEY': False
}

4. 验证parsed函数是否被调用

你可以在parsed函数里加个打印语句,确保匹配到链接时会触发:

def parsed(self, response):
    print(f"Successfully crawled: {response.url}")
    yield {
        # 这里写你的数据提取逻辑
        'url': response.url,
        # 其他字段...
    }

按照上面的步骤调整后,应该就能让爬虫正确抓取到目标链接并执行parsed函数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:20:53