刘硕的Scrapy笔记(十,文件和图片下载)

1.文件下载:
Scrapy框架内部提供了两个Item Pipeline,专门用于下载文件
和图片:
● FilesPipeline
● ImagesPipeline
我们可以将这两个Item Pipeline看作特殊的下载器,用户使用
时只需要通过item的一个特殊字段将要下载文件或图片的url传递给
它们,它们会自动将文件或图片下载到本地,并将下载结果信息存入
item的另一个特殊字段,以便用户在导出文件中查阅。下面详细介
绍如何使用它们。
通过一个简单的例子讲解FilesPipeline的使用,在如下页面中
可以下载多本PDF格式的小说:

<html>
    <body>
        <a href='/book/sg.pdf'>down three countries</a>
        <a href='/book/xyj.pdf'>down west</a>
        <a href='/book/shz.pdf'>down lakerers</a>
        <a href='/book/hlm.pdf'>down red dream</a>
    </body>
</html>
  • 步骤 01 在配置文件settings.py中启用FilesPipeline,通常
    将其置于其他Item Pipeline之前:
ITEM_PIPELINES = {
    'scrapy.pipelines.files.FilesPipeline':299,
    'Book.pipelines.BookPipeline': 300,
    'Book.pipelines.DuplicatePipeline':301,
    #'Book.pipelines.MongoDBPipeline':302
}
  • 步骤 02 在配置文件settings.py中,使用FILES_STORE指定文
    件下载目录,如:
FILES_STORE='/home/liushuo/Download/scrapy'
  • 步骤 03 在Spider解析一个包含文件下载链接的页面时,将所
    有需要下载文件的url地址收集到一个列表,赋给item的
    file_urls字段(item['file_urls'])。FilesPipeline在处理
    每一项item时,会读取item['file_urls'],对其中每一个url进
    行下载,Spider示例代码如下:
class DownloadBookSpider(scrapy.Spider):
...
    def parse(response):
        item = {}
        # 下载列表
        item['file_urls'] = []
        for url in response.xpath('//a/@href').extract():
            download_url = response.urljoin(url)
            # 将url 填入下载列表
            item['file_urls'].append(download_url)
        yield item

当FilesPipeline下载完item['file_urls']中的所有文件后,会将
各文件的下载结果信息收集到另一个列表,赋给item的files字段
(item['files'])。下载结果信息包括以下内容:
● Path文件下载到本地的路径(相对于FILES_STORE的相对路
径)。
● Checksum文件的校验和。
● url文件的url地址。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容