Scrapy Link Extractor无法获取深度超过第二层的链接问题
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
相关产品推荐
相关产品推荐

