scrapy 下载文件

接到组长需求,在某个网站上搜索“附件”,后下载所有相关文章内的 附件.word 或 附件.pdf

思路:

Files Pipeline

在某个Spider中,你爬取一个item后,将相应的文件URL放入file_urls字段中
item被返回之后就会转交给item pipeline
当这个item到达FilesPipeline时,在file_urls字段中的URL列表会通过标准的Scrapy调度器和下载器来调度下载,并且优先级很高,在抓取其他页面前就被处理。而这个item会一直在这个pipeline中被锁定,直到所有的文件下载完成。
当文件被下载完之后,结果会被赋值给另一个files字段。这个字段包含一个关于下载文件新的字典列表,比如下载路径,源地址,文件校验码。files里面的顺序和file_url顺序是一致的。要是某个写文件下载出错就不会出现在这个files中了。

例:
setting.py:
# 同时使用图片和文件Pipeline
ITEM_PIPELINES={
    'scrapy.pipelines.images.ImagesPipeline': 1,
    'scrapy.pipelines.files.FilesPipeline': 2,
}
# 文件和图片存储路径
FILES_STORE = '/path/to/valid/dir'
IMAGES_STORE = '/path/to/valid/dir'
# 文件过期时间
FILES_EXPIRES = 90
# 图片过期时间
IMAGES_EXPIRES = 30
# 图片缩略设置
IMAGES_THUMBS = {
    'small': (50, 50),
    'big': (270, 270),
}
# 图片过滤器,最小高度和宽度
IMAGES_MIN_HEIGHT = 110
IMAGES_MIN_WIDTH = 110
item.py
import scrapy 
···

class myFileItem(scrapy.Item):
    # ... 其他item fields
    file_urls = scrapy.Field()
    files = scrapy.Field()

以上

    原文作者:汤汤汤汤汤雪林
    原文地址: https://www.jianshu.com/p/4903e40c383e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞