账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    scrapy关于定制自己的FilePipeline实现文件重命名的问题
    28
    0

    由于scrapy自己的FilePipeline是用下载url的hash码来给文件命名的,所以想要定制自己的filepipeline,给文件重新命名。于是google了一下,发现大家都说是:继承FilesPipeline类然后重写get_media_requests和file_path方法,大致的代码如下:

    import scrapy
    from scrapy.pipelines.images import FilesPipeline
    from scrapy.exceptions import DropItem
    
    class MyFilesPipeline(FilesPipeline):
    
        def get_media_requests(self, item, info):
            file_url = item['file_url']
            meta = {'filename': item['name']}
            yield Request(url=file_url, meta=meta)
            
        def file_path(self, request, response=None, info=None):
            return request.meta.get('filename','')

    但我希望给文件命的名字,是要从下载链接的响应的头信息中获取的,具体来说是从response.headers.get('Content-Disposition')中提取。于是我这样重写file_path方法:

        def file_path(self, request, response=None, info=None):
            pattern = re.compile(r'filename=(.*)')
            filename = pattern.search(r.headers['Content-Disposition'].encode('ISO-8859-1').decode('gbk')).group(1)
            return filename

    但发现这样写,连文件都下载不了了。请问问题在哪里?另外,貌似file_path方法中的response是空的,为什么?

    ========================================================

    更具体的代码,我的Pipeline长这样:

    class MyfilesPipeline(FilesPipeline):
        def get_media_requests(self, item, info):
            return [scrapy.Request(x) for x in item.get(self.files_urls_field, [])]
    
        def file_path(self, request, response=None, info=None):
            pattern = re.compile(r'filename=(.*)')
            containFileName = response.headers.get('Content-Disposition').decode('gbk')
            filename = pattern.search(containFileName).group(1)
            return 'full/%s' % filename

    但跑的结果:

    2018-04-02 17:14:46 [scrapy.middleware] INFO: Enabled downloader middlewares:
    ['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
     'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
     'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
     'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
     'scrapy.downloadermiddlewares.retry.RetryMiddleware',
     'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
     'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
     'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
     'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
     'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
     'scrapy.downloadermiddlewares.stats.DownloaderStats']
    2018-04-02 17:14:46 [scrapy.middleware] INFO: Enabled spider middlewares:
    ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
     'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
     'scrapy.spidermiddlewares.referer.RefererMiddleware',
     'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
     'scrapy.spidermiddlewares.depth.DepthMiddleware']
    2018-04-02 17:14:46 [scrapy.middleware] INFO: Enabled item pipelines:
    ['cszgSpider.pipelines.MyfilesPipeline',
     'cszgSpider.pipelines.CszgspiderPipeline']
    2018-04-02 17:14:46 [scrapy.core.engine] INFO: Spider opened
    2018-04-02 17:14:46 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
    2018-04-02 17:14:46 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
    2018-04-02 17:14:46 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://cishan.chinanpo.gov.cn/biz/ma/csmh/d/csmhddoSort.html?pageNo=1&;search_condit=&sort=desc&flag=0> (referer: None)
    2018-04-02 17:14:47 [scrapy.core.scraper] DEBUG: Scraped from <200 http://cishan.chinanpo.gov.cn/biz/ma/csmh/d/csmhddoSort.html?pageNo=1&;search_condit=&sort=desc&flag=0>
    {'file_urls': ['http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff80808162718ac70162854c92690082',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff808081627192280162853fdb1501e1',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff80808162718ac701627b3fd553004f',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff80808162718ac7016275e8bcda0039',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff80808162718ac7016275d0c49e002d',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff80808162719228016275c014f700dc',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff80808162719228016275a2d33d00c6',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff8080816271922801627551a95d00af',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff80808162719228016274eb5c5300a3',
                   'http://cishan.chinanpo.gov.cn/mz/upload/pub/load/resource_download.html?resourceid=ff8080816271922801627453688d000d'],
     'files': []}
    2018-04-02 17:14:47 [scrapy.core.engine] INFO: Closing spider (finished)
    2018-04-02 17:14:47 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
    {'downloader/request_bytes': 518,
     'downloader/request_count': 1,
     'downloader/request_method_count/GET': 1,
     'downloader/response_bytes': 12444,
     'downloader/response_count': 1,
     'downloader/response_status_count/200': 1,
     'finish_reason': 'finished',
     'finish_time': datetime.datetime(2018, 4, 2, 9, 14, 47, 11611),
     'item_scraped_count': 1,
     'log_count/DEBUG': 3,
     'log_count/INFO': 7,
     'response_received_count': 1,
     'scheduler/dequeued': 1,
     'scheduler/dequeued/memory': 1,
     'scheduler/enqueued': 1,
     'scheduler/enqueued/memory': 1,
     'start_time': datetime.datetime(2018, 4, 2, 9, 14, 46, 433082)}
    2018-04-02 17:14:47 [scrapy.core.engine] INFO: Spider closed (finished)

    下载链接都有了,但是好像没有启动下载,请问为什么?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部