了解 scrapy 重命名图像的工作原理

2023-11-29

我看到所有问题here,但我还不明白。

实际上,使用下面的代码我做了我需要的事情,除了重命名图像,所以我尝试更改名称items.py文件,请检查里面的注释。

设置.py

SPIDER_MODULES = ['xxx.spiders']
NEWSPIDER_MODULE = 'xxx.spiders'
ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_STORE = '/home/magicnt/xxx/images'

items.py

class XxxItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    image_urls = scrapy.Field()
    #images = scrapy.Field()<---with that code work with default name images
    images = title<--- I try rename here, but not work

蜘蛛.py

from xxx.items import XxxItem
import scrapy
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem

class CoverSpider(scrapy.Spider):
    name = "pyimagesearch-cover-spider"
    start_urls = ['https://xxx.com.br/product']
    def parse(self, response):
        for bimb in response.css('#mod_imoveis_result'):
            imageURL = bimb.xpath('./div[@id="g-img-imo"]/div[@class="img_p_results"]/img/@src').extract_first()
            title = bimb.css('#titulo_imovel::text').extract_first()
            yield {
                'image_urls' : [response.urljoin(imageURL)],
                'title' : title
            }
        next_page = response.xpath('//a[contains(@class, "num_pages") and contains(@class, "pg_number_next")]/@href').extract_first()
        yield response.follow(next_page, self.parse)

我的目标是使用项目中的标题重命名下载的图像。欢迎任何有关此目标的提示。

我对 python 和 oo 完全陌生,我通常使用结构性 php 进行抓取,但意识到它是一个多么好的 scrapy,请求一点耐心和帮助。


我的代码基于Scrapy Image Pipeline:如何重命名图像?我一周前测试过它,它对我自己的蜘蛛有效。

# This pipeline is designed for an item with multiple images
class ImagesWithNamesPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        # values in field "image_name" must have suffix ".jpg"
        # you can only change "image_name" to your own image name filed "images"
        # however it should be a list
        for (image_url, image_name) in zip(item[self.IMAGES_URLS_FIELD], item["image_names"]):
            yield scrapy.Request(url=image_url, meta={"image_name": image_name})

    def file_path(self, request, response=None, info=None):
        image_name = request.meta["image_name"]
        return image_name

以下是如何ImagePipeline works:

管道将执行image_downloaded -> get_images -> file_path为了。 (“->”表示调用)

  • image_downloaded:保存图像get_images通过调用返回persist_file
  • get_images:将图像转换为JPEG
  • file_path: 返回相对路径图像的

我扫了一遍ImagePipeline的源代码并没有找到用于重命名图像的特殊字段。 Scrapy 将以这种方式重命名它:

def file_path(self, request, response=None, info=None):
    image_guid = hashlib.sha1(to_bytes(url)).hexdigest()  # change to request.url after deprecation
    return 'full/%s.jpg' % (image_guid)

因此我们应该重写方法file_path。根据FilePipeline的源代码ImagePipeline继承了哪个,我们只需要返回相对路径 and persist_file会把事情做好的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 scrapy 重命名图像的工作原理 的相关文章

  • 翠儿。让流永远运行

    我对 tweepy python 库比较陌生 我想确保我的流 python 脚本始终在远程服务器上运行 因此 如果有人能够分享如何实现这一目标的最佳实践 那就太好了 现在我正在这样做 if name main while True try
  • 如何使用 cython 编译扩展?

    我正在尝试从示例页面编译一个简单的 cython 扩展here http docs cython org src userguide tutorial html在我安装了 Python 2 6 64 位版本的 Windows 7 64 位计
  • 没有任何元数据的 zip 文件

    我想找到一种简单的方法来压缩一堆文件 而无需任何文件元数据 例如时间戳 这zip命令似乎总是保留元数据 我没有找到禁用元数据的方法 我希望解决方案是一个命令或最多一个 python 脚本 谢谢 正如一些帖子已经指出的那样 zip 标头中的大
  • 从正在运行的 python 脚本检测优化标志是否为 -O 或 -OO

    有时我想生成一个子进程 其优化标志与启动父进程时使用的优 化标志相同 我可以使用类似的东西 optimize not debug 但这样我就可以匹配两者 O and OO flags 是否有一些 python 内部状态包含该信息 经过一番深
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 在 Numpy 中切片后确定结果数组的形状

    我很难理解在 numpy 中切片后如何确定结果数组的形状 例如 我使用以下简单代码 import numpy as np array np arange 27 reshape 3 3 3 slice1 array 1 2 1 slice2
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • 如何使用Python的super()来更新父值?

    我对继承很陌生 之前所有关于继承和 Python 的 super 函数的讨论都有点超出我的理解 我当前使用以下代码来更新父对象的值 usr bin env python test py class Master object mydata
  • 将 Pandas 列中的列表拆分为单独的列

    这是我在 pandas 数据框中的 特征 列 Feature Cricket 82379 Kabaddi 255 Reality 4751 Cricket 15640 Wildlife 730 LiveTV 13 Football 4129
  • Django 在选择列表更改时创建毫无意义的迁移

    我正在尝试使用可调用创建一个带有选择字段的模型 以便 Django 在选择列表更改时不会创建迁移 如中所述this https stackoverflow com questions 31788450 stop django from cr
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • select() 可以在 Windows 下使用 Python 中的文件吗?

    我正在尝试在 Windows 下运行以下 python 服务器 An echo server that uses select to handle multiple clients at a time Entering any line o
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • Python - 如何查询定义方法的类?

    我的问题有点类似于this one https stackoverflow com questions 5520580 how do you get all classes defined in a module but not impor
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280

随机推荐

  • 获取 popover 的 data-content 内 HTML 标签的元素

    我正在 Bootstrap3 的 popover 中工作 我在这里放置了如下 HTML 内容 a href class btn title Test Click Here a 我无法引用 data content 属性中存在的 html 元
  • boost binary_oarchive 对于不同的编译器的工作方式不同

    我需要在客户端和服务器之间传输数据 当我将服务器从 Windows msvc140 移动到 Debian gcc 64 位 时 我的字节流类出现了问题boost 他们的档案是不同的 include
  • 如何使用 iText 将图形绘制为 PDF?

    我正在尝试完成一个绘制图形并将其写入 PDF 的示例 但我不断收到 PDF 没有页面的错误 如果我在打开后使用 document add 添加一些简单的东西 它工作正常 我只是永远看不到图形 这是我的代码 Document document
  • 用contentResolver删除短信太慢

    我想删除手机上的所有短信 除了每次对话的最后 500 条短信 这是我的代码 但速度非常慢 删除一条短信大约需要 10 秒 我如何加速这段代码 ContentResolver cr getContentResolver Uri uriConv
  • 简单的 ImageView 颜色动画

    您好 我对 Android 比较陌生 如果可能的话 我希望获得一些关于在哪里搜索以解决我的问题的指南或建议 显然 我不具备发布图像的声誉 因此我会尽力解释它 假设我有一个空瓶子 一旦调用这个片段 活动 我想引入一个动画 它将逐渐垂直地 从下
  • 从列表中获取 min() 和 max() 的有效方法? [复制]

    这个问题在这里已经有答案了 我的问题来自发布到的答案如何在python 3中找到任意列表中缺失的数字 大多数解决方案建议使用类似的东西 a 10 12 13 8 get set of full numbers allNums set x f
  • HTML5 中样式元素的“scoped”属性当前状态如何?

    这里说明了http www w3 org TR html markup style html style 允许的父元素 任何可以包含元数据元素 div noscript 的元素 节 文章 旁白 that
  • 来自用户空间的 int 指令

    我的印象是 x86 上的 int 指令没有特权 所以 我认为我们应该能够从用户空间应用程序执行这条指令 但似乎并非如此 我正在尝试从 Windows 上的用户应用程序执行 int 我知道这样做可能不对 但我想找点乐子 但 Windows 正
  • 使用 java 进行 Flyway 迁移

    我学习了使用java进行flywaydb迁移 可以使用JDBC连接 还可以通过SpringTemplate进行spring支持 但是flyway不能与DAO一起使用 对于具有更多关系的表 实体 使用 DAO 而不是 sql 进行迁移要容易得
  • 如何使MySQL表的某一列不可见

    我正在 ID 列上运行查询 但我不希望它在我的框架 窗格中可见 我怎样才能实现这个目标 我应该再创建一个表吗 sql mysql 中有一个可以隐藏列的函数吗 我尝试用谷歌搜索 但还没有找到任何东西 这是代码 public void tabl
  • 带有延迟加载的自定义列表

    I have successfully implemented like this for lazy loading in custom list 我为此使用的代码在这里 黑莓中带有图像的自定义列表在链接的问题中 我定位了心形图标的 y 坐
  • 从 ggplot2 中删除顶部和右侧边框[重复]

    这个问题在这里已经有答案了 是否可以从 ggplot2 图表中删除顶部和右侧边框 即 我想保留 x 轴和 y 轴 但删除图形周围的其余黑框 M 看到这个线程 它专门处理这里的问题 http groups google com group g
  • plot.window(...) 中的 R 错误需要有限的“xlim”值

    我想绘制一个 data frame 我的问题是出现以下错误 Error in plot window need finite xlim values In addition Warning messages 1 In xy coords x
  • 在 chrome://settings 和类似的 url 上运行用户脚本

    为什么 tampermonkey 对以下网址不起作用chrome history or chrome settings 有什么方法可以在此页面上运行用户脚本吗 不幸的是 这是不可能的 因为chrome方案 chrome 不支持 match的
  • 即使执行 IF 语句的 Else 语句也是 TRUE

    我有一个问题Python标题中描述的语言 for slovo in slova if pygame mouse get pressed 0 and slovo rect collidepoint pygame mouse get pos f
  • XCode Bots API 配置编辑失败

    我想通过 XCode Bots API 更改机器人的方案名称 像这样的请求 curl XPATCH H Content Type application json H x xcsclientversion 8 https localhost
  • 在部署时无需 Regsrv32 即可将 TLB 转换为托管 .NET 程序集

    我有一个作为第三方 API 的一部分提供的 TLB 我使用 TLBIMP exe 生成 DLL 程序集包装器 然而 在开发时 该程序集似乎需要使用 regsvr32 注册才能使用 然而 这在开发时不是问题 我在生产中使用托管实例 并且在部署
  • 两个指定顶点之间的最短两条不相交路径

    给定一个加权无向图G和两个顶点a b 我们想要找到两条路径一个 gt 乙 and b gt a使得它们不共享任何边 并且两条路径中边的权重之和最小 最多可以有1 000顶点 直到10 000 edges 我最初尝试提出一种动态编程方法 但找
  • 计算两个变量之间的天数(一个是设定变量,另一个是事实变量)

    我一直在疯狂地寻找解决方案 但到目前为止我还没有成功 计算库存变量和 Ansible 事实之间的天数 当我手动设置这两个变量时 我没有问题 两者都被识别为日期 我可以从那里开始工作 如下所示 这是预期的输出 在 2 个手动设置的变量之间工作
  • 了解 scrapy 重命名图像的工作原理

    我看到所有问题here 但我还不明白 实际上 使用下面的代码我做了我需要的事情 除了重命名图像 所以我尝试更改名称items py文件 请检查里面的注释 设置 py SPIDER MODULES xxx spiders NEWSPIDER