【问题标题】:Scrapy image pipeline: How to drop image on checksum?Scrapy 图像管道:如何在校验和上删除图像?
【发布时间】:2019-04-01 17:38:02
【问题描述】:

我正在使用 scrapy 图像管道抓取一些图像,并希望从导入中删除与某个哈希匹配的图像。

类 MyImagesPipeline(ImagesPipeline):

def get_media_requests(self, item, info):
    for image_url in item['image_urls']:
        yield scrapy.Request(image_url)

def item_completed(self, results, item, info):
    image_paths = [x['path'] for ok, x in results if ok]
    if not image_paths:
        raise DropItem("Item contains no images")
    item['image_paths'] = image_paths
    return item


item['images']     =  response.xpath('//meta[@property="og:image"][not(contains(@content, "Demo_600x600"))]/@content').extract()[0:self.max_pix]

图片:

url "https://www.example.de…212-B726-757P-A20D-1.jpg"
path    "full/56de72acb6c1e12ffa8644c1bb96df4edf421438.jpg"
checksum    "e206446c40c22cfd5f94966c337b56cc"

如何确保在导入中排除此图像?

【问题讨论】:

    标签: scrapy scrapy-pipeline


    【解决方案1】:

    您可以尝试从 imagepipeline 覆盖 get_images 方法。如果哈希匹配,则不会下载图像。

        import logging
        from io import BytesIO
        from scrapy.utils.misc import md5sum
    
        logger = logging.getLogger(__name__)
    
        def get_images(self, response, request, info):
            checksum = md5sum(BytesIO(response.body))
            drop_list = ['hash1', 'hash2']
            logger.debug('Verifying Checksum: {}'.format(checksum))
            if checksum in drop_list:
                logger.debug('Skipping Checksum: {}'.format(checksum))
                raise Exception('Dropping Image')
    
            return super(MyImagesPipeline,self).get_images(response, request, info)
    

    【讨论】:

    • 谢谢萨钦。我尝试实施,但没有任何效果。该函数必须放在类 MyImagesPipeline(ImagesPipeline): 中,对吗?我将您的 drop_list 替换为:self.pic_dummy_checksum,来自蜘蛛:pic_dummy_checksum = [ '671f9f34aa31bdf6bf2aeb78e16db060', ... 我如何记录丢弃?
    • 尝试引发异常。我已经编辑了我的答案。希望这会有所帮助。
    • 将该代码放入 MyImagesPipeline 类后,日志文件中没有任何条目。你是从哪里得到这些信息的?我在 media_downloaded 上根本找不到任何文档:docs.scrapy.org/en/latest/topics/media-pipeline.html
    • 没有文档。我指的是文件管道的scrapy代码。 github.com/scrapy/scrapy/blob/master/scrapy/pipelines/files.py
    • 您是否设置了正确的日志级别?尝试在 cmd 上手动打印和运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多