gpt4 book ai didi

Scrapy - 将爬取的页面存储为静态文件

转载 作者:行者123 更新时间:2023-12-01 08:59:46 27 4
gpt4 key购买 nike

抱歉,如果这是一个草率的菜鸟问题,但我花了很长时间寻找这个答案:

我想将我在本地文件系统中抓取的每个 URL 的原始数据存储为一个单独的文件(即 response.body ->/files/page123.html) - 理想情况下,文件名是 URL 的哈希值.这样我就可以对 HTML 进行进一步处理(即在 Solr/ElasticSearch 中进一步解析、索引等)。

我已阅读文档,但不确定是否有内置方法可以做到这一点?由于页面默认由系统下载,因此编写自定义管道等似乎没有意义

最佳答案

正如保罗所说,HttpCache 中间件可能适合您,但我建议您编写自己的自定义管道。

Scrapy 有 built-in ways将数据导出到文件,但它们用于 json、xml 和 csv 而不是原始 html。不要担心,虽然它不是太难!

如果你的 items.py 看起来像这样:

from scrapy.item import Item, Field

class Listing(Item):
url = Field()
html = Field()

并且您一直在将抓取的数据保存到蜘蛛中的这些项目中,如下所示:

item['url'] = response.url
item['html'] = response.body

你的 pipelines.py 只是:

import hashlib
class HtmlFilePipeline(object):
def process_item(self, item, spider):
file_name = hashlib.sha224(item['url']).hexdigest() #chose whatever hashing func works for you
with open('files/%s.html' % file_name, 'w+b') as f:
f.write(item['html'])

希望对您有所帮助。哦,别忘了把 files/ 目录放在你的项目根目录并添加到你的 settings.py :

ITEM_PIPELINES = {
'myproject.pipeline.HtmlFilePipeline': 300,

}

来源:http://doc.scrapy.org/en/latest/topics/item-pipeline.html

关于Scrapy - 将爬取的页面存储为静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com