Scrapy爬虫已抓取内容但.jl文件为空问题求助
解决Scrapy控制台输出但.jl文件为空的问题
嘿,我来帮你搞定这个新手常遇的问题!你现在的情况很典型——控制台能打印抓取到的数据,但输出的.jl文件是空的,核心原因是你没让Scrapy“接管”这些数据,只是自己手动print了而已。
问题根源
Scrapy的输出管道(包括写入.jl、.csv等文件)只会处理你在parse方法里yield返回的Item或字典对象。你当前的代码只是把抓取到的内容存在本地列表里打印,完全没通知Scrapy要把这些数据输出到文件系统。
修复方案
新手不用先复杂定义Item类,直接yield包含数据的字典就足够让Scrapy处理输出了。修改后的代码如下:
import scrapy class ProgxSpider(scrapy.Spider): name = 'progx' allowed_domains = ['random.com'] # 小提醒:这里的start_urls可能是笔误,比如应该是https://www.random.com/(去掉末尾的.html),否则可能访问不到有效页面 start_urls = ['https://www.random.com.html'] def parse(self, response): # 遍历每个抓取到的位置文本 for location in response.xpath('//div[@class="property-info-location ellipsis-element-control"]/text()').extract(): # 清理文本里的多余空格、换行符 clean_loc = location.strip() if clean_loc: # 跳过空内容或全是空格的无效数据 # 用yield返回字典,Scrapy会自动把它传给输出管道 yield {'location': clean_loc}
验证方法
运行爬虫时用以下命令:
scrapy crawl progx -o output.jl
这时候打开output.jl就能看到抓取到的数据了!
额外注意点
你代码里的xpath中class写的是property-info- location(中间多了空格),我已经改成了合理的property-info-location——如果实际页面的class确实是带空格的多类,那可以改成contains(@class, "property-info-location")来匹配,不过你说控制台能输出,应该只是输入时的笔误~
内容的提问来源于stack exchange,提问作者fg42
相关产品推荐
相关产品推荐

