网站首页 > 博客文章 正文
在Scrapy中的数据可以通过一些方法来生成Json或CSV文件。
第一种方法是使用Feed Exports。你可以通过从命令行设置文件名和所需格式来运行爬虫并存储数据。
如果你希望自定义输出并在爬虫运行时生成结构化Json或CSV。你可以使用Item Pipeline在管道中设置输出属性,而不是从命令行设置。
使用Feed Export导出
你可以使用scrapy crawl myspider命令从命令行运行你的scraper 。如果要创建输出文件,则必须设置要使用的文件名和扩展名:
scrapy crawl myspider -o data.json scrapy crawl myspider -o data.csv scrapy crawl myspider -o data.xml
Scrapy有自己的内置工具来生成json,csv,xml和其他序列化格式。
如果要指定生成的文件的相对路径或绝对路径,或者从命令行设置其他属性,也可以执行此操作:
scrapy crawl reddit -s FEED_URI='/home/user/folder/mydata.csv' -s FEED_FORMAT=csv scrapy crawl reddit -s FEED_URI='mydata.json' -s FEED_FORMAT=json
使用Item Pipeline导出
Scrapy Item Pipeline是一种处理数据的通用工具。典型的用法是清理html,验证已删除的数据,删除重复数据并将数据存储在数据库中。如果你想要一个方便且可自定义的过程来存储数据,则可以使用管道。
你需要使用JsonItemExporter:
from scrapy.exporters import JsonItemExporter class JsonPipeline(object): def __init __(self): self.file = open(“books.json”,'wb') self.exporter = JsonItemExporter(self.file,encoding ='utf-8',ensure_ascii = False) self.exporter.start_exporting() def close_spider(self,spider): self.exporter.finish_exporting() self.file.close() def process_item(self,item,spider): self.exporter.export_item(item) return item
除了JsonItemExporter,还有CsvItemExporter,它与CSV的工作方式相同,但你必须调用CsvItemExporter:
class CsvPipeline(object): def __init __(self): self.file = open(“booksdata.csv”,'wb') self.exporter = CsvItemExporter(self.file,unicode) self.exporter.start_exporting() def close_spider( self,spider): self.exporter.finish_exporting() self.file.close() def process_item(self,item,spider): self.exporter.export_item(item) return item
请注意,在csv文件中,默认情况下,字段用“,”(逗号)分隔。如果你的字段包含带逗号的文本,这会破坏整个结构,所以你可能需要创建一个修复此问题的函数:
def create_valid_csv(self, item): for key, value in item.items(): is_string = (isinstance(value, basestring)) if (is_string and ("," in value.encode('utf-8'))): item[key] = "\"" + value + "\""
在导出项目之前调用此函数,以便ItemExporter相应地识别数据中的逗号。
配置settings.py
告诉scrapy你使用的管道非常重要,否则你的管道将不会被调用。
将下面的代码添加到Scrapy项目中的settings.py中:
ITEM_PIPELINES = { 'RedditScraper.pipelines.JsonPipeline':300, 'RedditScraper.pipelines.CsvPipeline':500, }
这些数字的含义是管道执行的优先级。在此示例中,JsonPipeline将执行得更快,但是数字必须在0-1000的范围内。
如果觉得文章对你有用,或是觉得文章不错,请关注小编,后续推出更多精彩内容哟~
猜你喜欢
- 2024-09-17 Kudra 介绍:可以从任何文档工具中提取代码数据
- 2024-09-17 Linux系统管理员必备的监控工具(linux监控工具nmon)
- 2024-09-17 简洁而优雅,Python Tablib实现将数据导出为Excel, Json等N种格式
- 2024-09-17 奋战一年,LangChain首个稳定版本发布,LangGraph把智能体构建为图
- 2024-09-17 推荐几个开发必备的JSON工具(推荐几个开发必备的json工具有哪些)
- 2024-09-17 浅谈在Linux中使用mongoexport工具导出数据
- 2024-09-17 常用的图像标注工具汇总(图像标注主要包括哪些项目)
- 2024-09-17 Python新工具:用三行代码提取PDF表格数据
- 2024-09-17 有备无患「GitHub 热点速览」(有备无患better safe than sorry)
- 2024-09-17 13个MacOS很赞的开源小工具-IT开发利器
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)