Scrapy爬虫抓取数据量不足及实现无限循环运行相关问题咨询
问题1:爬虫无法抓取全部法术数据的解决方法
- 首先修复代码中的显性错误:你当前
parse_spell方法中,zip遍历得到的变量名为name/level/components/resistance,但yield Spell时使用的是未定义的spell_name/spell_level等变量,如果没有在省略的逻辑中做变量赋值,会直接抛出NameError,导致对应请求的数据直接丢失,这是数据量缺失的核心原因之一,直接将yield部分的变量名和遍历得到的变量名对齐即可。 - 修复XPath匹配逻辑错误:你在article节点下使用
//开头的XPath是全局匹配而非相对当前节点匹配,会导致拿到页面中其他位置的内容,引发后续正则匹配失败,将对应XPath改为相对路径即可:
# 原来的写法 contents = article.xpath('//div[has-class("article-content")]') all_names = article.xpath("h1/text()").getall() # 修改为相对路径 contents = article.xpath('.//div[has-class("article-content")]') all_names = article.xpath('./h1/text()').getall()
- 避免zip截断数据:正则匹配得到的四个列表
all_names/all_levels/all_components/all_resistances如果长度不一致,zip会以最短的列表长度为准,导致长列表中的多余数据被丢弃,添加长度校验逻辑,长度不一致时打印当前页面URL单独排查即可。 - 调整Scrapy配置规避站点限流:在项目的
settings.py中添加以下配置,避免并发过高被站点拦截:
# 替换默认UA,避免被站点识别为爬虫 USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' # 降低并发数 CONCURRENT_REQUESTS = 2 CONCURRENT_REQUESTS_PER_DOMAIN = 2 # 添加请求间隔,单位为秒 DOWNLOAD_DELAY = 1 # 开启重试机制,增加重试次数 RETRY_ENABLED = True RETRY_TIMES = 5 RETRY_HTTP_CODES = [429, 500, 502, 503, 504]
- 开启DEBUG日志排查丢失请求:运行爬虫时添加参数
scrapy crawl Pathfinder2 -O XXX.json --logfile=scrapy.log --loglevel=DEBUG,可以在日志中查看所有被丢弃的请求的具体原因,包括被去重、域名不在允许列表、重试失败等情况。
问题2:实现爬虫无限循环运行的方法
支持添加等待时长实现无限循环,推荐两种实现方案:
- 外部脚本调度(更稳定,推荐):写shell或者Python脚本循环执行爬虫命令,示例shell脚本如下:
#!/bin/bash while true do scrapy crawl Pathfinder2 -O XXX.json sleep 86400 # 等待时长,单位为秒,此处为间隔1天重跑一次,可自行调整 done
- 爬虫内部实现循环:通过监听爬虫关闭信号,等待指定时间后重启爬虫,示例代码如下:
import time from scrapy import signals from twisted.internet import reactor class Pathfinder2Spider(scrapy.Spider): # 此处保留你原有爬虫的所有代码 @classmethod def from_crawler(cls, crawler, *args, **kwargs): spider = super().from_crawler(crawler, *args, **kwargs) crawler.signals.connect(spider.restart_spider, signal=signals.spider_closed) return spider def restart_spider(self): # 等待指定时长后重启爬虫,单位为秒 time.sleep(86400) reactor.callLater(0, self.crawler.engine.start)
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

