scrapy 将抓取内容中的图片下载到本地并替换内容中的原始图片

发布于 2022-09-06 15:09:21 字数 2249 浏览 20 评论 0

使用scrapy采集的文章里面有很多图片,都是远程图片,我想把这些远程图片都下载下来,然后把图片地址全都改成相对路径。

比如这篇文章的内容
http://news.163.com/17/1115/2...

里面的图片路径都是类似 http://dingyue.nosdn.127.net/... 这种

我想把里面的图片都下载到本地,然后再把路径保存再item 里面。

    def parse_article(self, response):
        item = response.meta['item']
        item['title'] = response.xpath("//div[@id='content']//h1[@class='entry-title']/text()").extract()[0]
        article_imgs = response.xpath("//div[@id='content']/article/div[@class='entry-content']//img")
        for img in article_imgs:
            img_src = img.xpath("/@src").extract()[0]
            file_name = os.path.basename(img_src)
            real_name = file_name.split('.')[-2]
            print("图片名称", real_name)
            save_path = 'images/shopify/' + str(real_name)
            print("保存路径", save_path)
            local_path = self.save_img(img_src, save_path)
            http_img_path = urljoin('http://www.tiangr.com', '/wp_content/uploads/' + local_path)
            print("替换路径", http_img_path)
            ####################
            到这里之后不知道该怎么替换原来的图片路径。
            ####################
            
        item['content'] = response.xpath("//div[@id='content']/article/div[@class='entry-content']").extract()[0]
        item['cimage_urls'] = response.xpath("//div[@id='content']//header[@class='entry-header']/img//@src").extract()     # 提取图片链接
        yield item

    def save_img(self, img_url, file_name):
        """
        保存图片
        :param img_url 图片地址
        :param file_name 文件名称
        :return:
        """
        image_path = img_url.split('.')
        extension = image_path.pop()
        if len(extension) > 3:
            extension = 'jpg'
        img_url = urljoin('http://dingyue.nosdn.127.net', img_url)
        u = urllib.request.urlopen(img_url)
        data = u.read()
        f = open(file_name + '.' + extension, 'wb')
        f.write(data)
        f.close()
        return file_name + '.' + extension

我在看文档的时候,看到虽然scrapy有ImagePipeline可以下载图片,但只能将下载的图片存到一个字段里。

所以请教一下大家在这种情况下是怎么操作的?

万分感谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

万水千山粽是情ミ 2022-09-13 15:09:22

您好,请问下这个问题您解决了吗?我也遇到了这种需求,能否一起探讨下?感谢。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文