Scrapy XPath无法输出数据求助:提取表格内容无结果
解决Scrapy爬虫导出空白JSON/CSV的问题
针对你遇到的Shell能取到数据但导出空白的情况,按以下步骤排查:
检查parse方法是否返回数据
新手最容易犯的错误:在Shell里能提取到数据,但爬虫代码里只做了打印,没有yield数据。必须通过yield返回字典或Item对象,Scrapy才会收集数据并导出。
错误示例:def parse(self, response): total_data = response.xpath('//span[@class="summary-num"]/text()').get() print(total_data) # 只打印不返回,导出文件必然空白正确示例:
def parse(self, response): total_data = response.xpath('//span[@class="summary-num"]/text()').get() # 返回字典,或者实例化Item后yield yield { 'total_cases': total_data.strip() if total_data else None }核对选择器是否完全一致
确保爬虫代码里的XPath/CSS选择器和你在Scrapy Shell中使用的完全相同,比如别把@id写成@class,或者路径少了层级。直接复制Shell里验证过的选择器到代码里,避免拼写错误。确认爬虫运行命令正确
导出文件必须在命令中指定-o参数,比如:scrapy crawl 你的爬虫名称 -o ./covid_data.json注意:如果输出路径是系统目录(如
/root/)可能会有权限问题,建议导出到当前用户有权限的本地文件夹,比如上述的当前目录。检查页面是否被重定向
在parse方法开头添加打印当前URL的代码,确认爬虫访问的是你预期的页面:def parse(self, response): print("当前访问URL:", response.url) # 后续提取逻辑...如果URL和
start_urls里的不一致,说明页面发生了重定向,需要调整start_urls为最终跳转后的地址。Item类使用是否正确(如果定义了Item)
如果你定义了Item类,要确保正确实例化并赋值后再yield:import scrapy class CovidItem(scrapy.Item): total_cases = scrapy.Field() total_deaths = scrapy.Field() def parse(self, response): item = CovidItem() item['total_cases'] = response.xpath('//span[@id="total-cases"]/text()').get() item['total_deaths'] = response.xpath('//span[@id="total-deaths"]/text()').get() yield item # 必须yield实例化后的Item对象
内容的提问来源于stack exchange,提问作者solidsickle
相关产品推荐
相关产品推荐

