Scrapy-FilesPipeline源码分析

369 阅读1分钟

1、get_media_ requests函数

  • 请求函数,获取item里面的file_urls数据,请求拿到文件的内容,并返回源码:
  • def get_ media_ requests(self, item, info) :
      return [Request(x) for x in
      item.get(self.files_urls_field, [])]
    

2、file_downloaded函数

  • 文件下载函数,具体操作是拿到文件内容和保存路径,然后保存。
  • 这里可以修改为保存到文件服务器上,需要服务器地址和ID和KEY,操作详见文件服务器供应商提供的开发文档。
  • 源码:
    • def file_ downloaded(self, response, request, info):
        path = self.file_path(request, response= response, info=info)
        buf = BytesIO(response.body)
        checksum = md5sum (buf)
        buf.seek(0)
        self.store .persist_file(path, buf, info)
        return checksum
      

3、file_path函数

  • 该函数是被调用的,需要获取地址,则调用这个函数,返回一个地址调用函数。
  • 源码:

4、item_completed函数

  • 文件下载好之后,通过这个函数,将item返回,传到下一个管道文件中去。
  • 如果没有return_item,则下一个管道文件将收不到item。
  • 源码:
    • def item_completed(self, results, item, info):
      	if isinstance(item, dict) or self.files_result_field in item_fields :
      	item[self.files_result_field] = [x for ok, x in results if ok]
          return item