吉阿吉

scrapy中ImagePipeline及图片懒加载

  • 在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original......)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。爬虫是使用伪属性解析。

  • ImagesPipeline:
  • class QiushiImagePipeline(ImagesPipeline):
    
        # 下载图片时加入referer请求头
        def get_media_requests(self, item, info):
            for image_url in item['image_urls']:
                headers = {'referer':item['referer']}
                yield Request(image_url, meta={'item': item}, headers=headers)
                # 这里把item传过去,因为后面需要用item里面的书名和章节作为文件名
    
        # 获取图片的下载结果, 控制台查看
        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")
            return item
    
        # 修改文件的命名和路径
        def file_path(self, request, response=None, info=None):
            item = request.meta['item']
            image_guid = request.url.split('/')[-1]
            filename = './{}/{}'.format(item['title'], image_guid)
            return filename

posted on 2021-05-04 15:46  吉阿吉  阅读(395)  评论(0)    收藏  举报

导航