图片的爬取
在隧道文件中导入:
from scrapy.pipelines.images import ImagesPipeline
给ImgPipeline继承:
class ImgproPipeline(ImagesPipeline):
导入三个函数:
获取地址和标题或其它想要传输的数据
def get_media_requests(self, item, info):
#获取图片地址和标题
img_src = item['img_url']
title = item['title']
#最后管道传输
yield scrapy.Request(img_src,meta={'title':title})
指定图片的名称(只需要返回图片存储的名称即可)
def file_path(self, request, response=None, info=None, *, item=None):
imgName = request.meta['title']+'.jpg'
print(imgName,'下载保存成功!')
return imgName
可以将当前的管道类接收到item对象传递给下一个管道类2
#如果没有下一个管道类,该方法可以不写
def item_completed(self, results, item, info):
return item
可配置项(写在配置文件中)
IMAGES_STORE = 'girlsLib' #设置图片保存的根目录。将图片文件保存在此目录下的子目录中。
IMAGES_THUMBS = {
'small': (50, 50), # 生成缩略图的尺寸
'big': (270, 270),
}
文件流程
编码流程:
- 在`spider`中爬取要下载的文件链接,将其放置于item中的`file_urls`字段中存储
- spider提交item给FilesPipeline管道
- 当`FilesPipeline`处理时,它会检测是否有`file_urls`字段,如果有的话,则会对其进行文件下载
- 下载完成之后,会将结果写入item的另一字段`files`
**`Item`要包含`file_urls`和`files`两个字段**
- 配置文件保存路径(settings.py):
```python
FILES_STORE = ’xxxxxx‘
items文件
import scrapy
class FileproItem(scrapy.Item):
files = scrapy.Field()
file_urls = scrapy.Field()
title = scrapy.Field()
管道文件
from scrapy.pipelines.files import FilesPipeline
import scrapy
class ImgproPipeline(FilesPipeline):
def get_media_requests(self, item, info):
file_urls = item['file_urls']
title = item['title']
yield scrapy.Request(file_urls,meta={'title':title})
#指定文件的名称(只需要返回文件存储的名称即可)
def file_path(self, request, response=None, info=None, *, item=None):
fileName = request.meta['title']
print(fileName,'下载保存成功!')
return fileName
#如果没有下一个管道类,该方法可以不写
def item_completed(self, results, item, info):
return item #可以将当前的管道类接收到item对象传递给下一个管道类2.