接到组长需求,在某个网站上搜索“附件”,后下载所有相关文章内的 附件.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()
以上