怎么使用 Scrapy 框架自带的 pipelines

定义一个 item

参数要设置为 file_urls 和 files
调用时 files 可以不写,有默认值

class PipelineFilepipelines(scrapy.Item):
    file_urls = scrapy.Field()
    files = scrapy.Field()

启用默认的 FilesPipeline

把这串代码在 settings 加入 ITEM_PIPELINES 的字典里
'scrapy.pipelines.files.FilesPipeline': 300,

配置一个下载路径(FILE_STORE)

在 settings 里设置的,随便找个位置放就行了,记得看好自己写的目录是在哪,别最后找不到了。
FILES_STORE = './files'

调用 items

在自己的爬虫主文件里导入,我这里是 douban.py

from ..items import PipelineFilepipelines

主文件下载做法

def parse(self, response):
	...
	files_urls = ['https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp']
	yield PipelineFilepipelines(
				file_urls=files_urls,
			)
	...

在 parse() 里放进这样格式的内容就行了。
需要注意的有

  1. 调用时 files 可以不写,有默认值,我这里就没写
  2. file_urls 接收的是列表,所以得传一个列表过去

精细化操作

以上做法简单却也简陋,很多事情做不了,比如更改下载的文件名,设置请求头等
所以还是自己创建一个 pipelines,然后对接 FilesPipeline 更好。
如下代码。

from scrapy.pipelines.files import FilesPipeline

class PipelinesTest(FilesPipeline):

    def file_path(self, request, response=None, info=None, *, item=None):
        '''
        设置下载文件名称的
        '''
        # https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp
        return request.url.split('/')[-1]

    def get_media_requests(self, item, info):
        '''
        设置一个下载请求信息的, 有些文件设置了防盗链的时候,可以在这里设置请求头之类的。
        '''
        for url in item['file_urls']:
            print('运行中')
            yield scrapy.Request(
                url,
                headers={
                    "referer": "https://movie.douban.com/"
                }
            )

注意的有

  1. 记得去启用这个自己创建的管道 'SpriderTest.pipelines.PipelinesTest': 300,
  2. 记得导入 FilesPipeline
    from scrapy.pipelines.files import FilesPipeline
posted @ 2023-02-13 15:27  淦丘比  阅读(45)  评论(0编辑  收藏  举报