codecamp

scrapy 2.3 支持的存储

文件系统存储

文件使用 SHA1 hash 文件名的URL。

例如,以下图像URL::

http://www.example.com/image.jpg

谁的 ​SHA1 hash​ 是::

3afec3b4765f8f0a07b78f98c07b83f013567a0a

将下载并存储在以下文件中::

<IMAGES_STORE>/full/3afec3b4765f8f0a07b78f98c07b83f013567a0a.jpg

在哪里?

  • <IMAGES_STORE>​ 目录是否在中定义? ​IMAGES_STORE​ 图像管道的设置。
  • full 是一个子目录,用于从缩略图中分离完整图像(如果使用)。有关详细信息,请参阅 图像的缩略图生成 .

FTP服务器存储

2.0 新版功能.

FILES_STORE​ 和 ​IMAGES_STORE​ 可以指向FTP服务器。Scrapy会自动将文件上传到服务器。

FILES_STORE​ 和 ​IMAGES_STORE​ 应以下列形式之一书写:

ftp://username:password@address:port/path
ftp://address:port/path

如果 ​username​ 和 ​password​ 不提供,它们是从 ​FTP_USER​ 和 ​FTP_PASSWORD​ 分别设置。

FTP支持两种不同的连接模式:主动或被动。Scrapy默认使用被动连接模式。要使用活动连接模式,请设置 ​FEED_STORAGE_FTP_ACTIVE​ 设置为 ​True​ .

Amazon S3存储

FILES_STORE​ 和 ​IMAGES_STORE​ 可以表示AmazonS3存储桶。Scrapy会自动将文件上传到bucket。

例如,这是一个有效的 ​IMAGES_STORE​ 价值:

IMAGES_STORE = 's3://bucket/images'

您可以修改用于存储文件的访问控制列表(ACL)策略,该策略由 ​FILES_STORE_S3_ACL​ 和 ​IMAGES_STORE_S3_ACL​ 设置。默认情况下,acl设置为 ​private​ . 要使文件公开,请使用 ​public-read​ 政策:

IMAGES_STORE_S3_ACL = 'public-read'

有关详细信息,请参阅 canned ACLs 在AmazonS3开发者指南中。

因为下流的东西 ​botocore​ 在内部,您还可以使用其他S3,如存储。像自我托管这样的存储 Minio 或 s3.scality . 您所需要做的就是在Scrapy设置中设置端点选项:

AWS_ENDPOINT_URL = 'http://minio.example.com:9000'

对于自托管,您可能觉得不需要使用SSL,也不需要验证SSL连接::

AWS_USE_SSL = False # or True (None by default)
AWS_VERIFY = False # or True (None by default)

谷歌云存储

FILES_STORE​ 和 ​IMAGES_STORE​ 可以表示一个谷歌云存储桶。Scrapy会自动将文件上传到bucket。(需要 google-cloud-storage )

例如,这些是有效的 ​IMAGES_STORE​ 和 ​GCS_PROJECT_ID​ 设置::

IMAGES_STORE = 'gs://bucket/images/'
GCS_PROJECT_ID = 'project_id'

有关身份验证的信息,请参见 documentation .

您可以修改用于存储文件的访问控制列表(ACL)策略,该策略由 ​FILES_STORE_GCS_ACL​ 和 ​IMAGES_STORE_GCS_ACL​ 设置。默认情况下,acl设置为 '' (空字符串)这意味着云存储将bucket的默认对象acl应用于该对象。要使文件公开,请使用 ​publicRead​ 政策:

IMAGES_STORE_GCS_ACL = 'publicRead'

有关详细信息,请参阅 Predefined ACLs 在谷歌云平台开发者指南中。

scrapy 2.3 启用媒体管道
scrapy 2.3 图像处理实例
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

scrapy 2.3 链接提取器

scrapy 2.3 统计数据集合

scrapy 2.3 发送电子邮件

scrapy 2.3 蜘蛛合约

scrapy 2.3 如何部署蜘蛛

scrapy 2.3 AutoThrottle扩展

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }