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

Scrapy Link Extractor无法获取深度超过第二层的链接问题

你的代码只提取了当前页面的链接,但没有对这些链接发起请求并继续爬取,所以只能拿到起始页(第一层)和起始页里的链接(第二层),第三层及更深的链接根本没机会被提取。

修改后的代码

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

class TestSpider(scrapy.Spider):
    name = "test"
    allowed_domains = ['telusinternational.com']  # 限制爬取域名,避免爬取外部站点
    link_extractor = LinkExtractor()

    def parse(self, response):
        # 提取当前页面的所有链接
        for link in self.link_extractor.extract_links(response):
            # 对每个链接发起请求,回调parse方法继续提取深层链接
            yield scrapy.Request(
                url=link.url,
                callback=self.parse
            )
            # 按需处理链接,比如打印或存入数据容器
            print(link.url)

process = CrawlerProcess(get_project_settings())
process.crawl('test', start_urls=['https://www.telusinternational.com/'])
process.start()

关键修改说明

  • 添加allowed_domains:限定爬取范围,只处理目标域名下的链接,避免爬虫无意义地爬取外部网站。
  • 生成Request并回调parse:这是核心逻辑——提取到链接后,必须发起请求让Scrapy下载对应页面,再通过parse回调继续提取该页面内的链接,以此实现逐层深入爬取,就能拿到第三层及更深层级的链接。
  • 去掉冗余的unique_links:Scrapy默认会自动处理重复请求,LinkExtractor提取的链接也已做基础去重,无需自行维护去重列表。

如果需要控制爬取深度,可在项目settings.py中设置DEPTH_LIMIT,比如DEPTH_LIMIT = 3就会限制爬虫只爬取到第三层链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:40:14