问题标签 [scrapy-pipeline]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
731 浏览

scrapy - Scrapy - 基于条件的爬取

我有以下 Scrapy 解析方法:

这会将提取的图像 URL 发送到 ImagePipelines。如果满足某个条件,我需要让 Scrapy 从该页面抓取其他链接......类似于......图像内容的校验和与哈希列表匹配。


我的问题是,一旦在 ImagesPipeline 中完成并填充了所有数据,我不知道如何访问该项目。item['images_matched']解析方法中没有填充含义,而是在管道中填充了含义。在访问该项目或对此的不同方法方面需要帮助


编辑:我发现在 之后添加以下内容是yield有效的。

然而,这对我来说似乎是非常糟糕的编码,因为项目字典有时可能非常大。传递它只是为了检查一个属性是很奇怪的。有没有更好的办法?

0 投票
1 回答
922 浏览

scrapy - 通过 Scrapy-Splash 返回图像内容

我正在使用 Scrapy-Splash 请求来获取页面的渲染屏幕截图,但我还需要该页面上的图像。我使用管道下载这些图像,但我在想 - 这不会对同一个图像提出两个请求吗?一次是在 Splash 呈现页面时,一次是在我发送下载请求时。有没有办法获得 Scrapy-Splash 请求返回的图像?

0 投票
0 回答
63 浏览

scrapy - 跳过下载但不跳过scrapy管道中的其他任务

有没有办法可以跳过下载网页,但在执行后仍然有管道的其他部分?

目前,我在 中读取了一个 json 对象文件start_requests,每个json对象都有一个网站 URL 和其他数据字段。如果网站 URL 不为空,它会产生一个请求对象,否则会跳过它。

在另一个函数parse中,我创建了项目对象,之后数据库管道就出现了。

即使网站 url 为空,我也想插入其他start_requests数据字段,在这种情况下不会创建请求对象。

0 投票
3 回答
711 浏览

python-3.x - 无法通过scrapy管道传递空url

我有一个数据对象列表,每个对象都包含一个要抓取的 url。其中一些 url 无效,但我仍然希望数据对象通过以到达项目管道。

在@tomáš-linhart 回复之后,我了解到在这种情况下使用中间件将不起作用,因为scrapy 不允许我首先创建请求对象。

如果 url 无效,另一种方法是返回 item 而不是 request。

以下是我的代码:

上面的代码抛出了一个错误,如图所示。除了错误之外,我不确定如何追踪问题的根源。:(

0 投票
1 回答
985 浏览

python - 如何使用scrapy每晚抓取数万个网址

我正在使用 scrapy 抓取一些大品牌来为我的网站导入销售数据。目前我正在使用

我正在使用 Item loader 指定 css/xpath 规则和 Pipeline 将数据写入 csv。我收集的数据是原价、售价、颜色、尺寸、名称、图片网址和品牌。

我只为一个拥有大约 10k url 的商家编写了蜘蛛,我花了大约 4 个小时。

我的问题是,对于 10k url,4 小时听起来还不错,还是应该比这更快。如果是这样,我还需要做什么来加快速度。

我只在本地使用一个 SPLASH 实例进行测试。但在生产中,我计划使用 3 个 SPLASH 实例。

现在主要问题是,我有大约 125 个商家,每个商家平均有 10k 产品。他们中的几个有超过 150k 的网址要抓取。

我需要每晚抓取他们所有的数据来更新我的网站。由于我的单个蜘蛛需要 4 个小时才能抓取 10k 网址,我想知道每晚实现 125 x 10k 网址是否是一个有效的梦想

我将非常感谢您对我的问题的经验丰富的意见。

0 投票
1 回答
77 浏览

scrapy - 如何确定 Scrapy 是否在 Pipeline.close_spider() 方法中遇到错误?

我有一个 Scrapy spider 和 Pipeline 设置。

我的 Spider 从网站中提取数据,我的 Pipelineprocess_item()方法将提取的数据插入到临时数据库表中。

最后,在 Pipeline 的close_spider()方法中,我对临时数据库表运行了一些错误检查,如果一切正常,那么我将临时表设为永久。

但是,如果 Scrapy 在close_spider()调用 Pipeline 的方法之前遇到异常,则可能是提取的数据不完整。

有没有办法检查 Scrapy 是否在 Pipeline 的close_spider()方法中遇到异常?如果出现错误(表明提取的数据可能不完整),我不想让临时表永久化。

我正在使用设置为 1 的CloseSpider扩展程序CLOSESPIDER_ERRORCOUNT在第一个错误时关闭 Spider。但是,我还没有弄清楚如何在 Pipeline 的close_spider()方法中区分正常关闭和错误关闭。

0 投票
2 回答
4037 浏览

python - Scrapy文件下载如何使用自定义文件名

对于我的scrapy项目,我目前正在使用FilesPipeline。下载的文件以 URL 的 SHA1 哈希值作为文件名存储。

如何使用我的自定义文件名来存储文件?

在上面的示例中,我希望文件名是“product1_0a79c461a4062ac383dc4fade7bc09f1384a3910.pdf”,所以我保持唯一性但使文件名可见。

作为一个起点,我探索了pipelines.py我的项目,但没有取得多大成功。

将此参数包含在我的settings.py

有人提出了类似的问题,但它确实针对图像而不是文件。

任何帮助将不胜感激。

0 投票
0 回答
449 浏览

scrapy - Scrapy 将 HTTP 错误记录到数据库或管道

我正在尝试全面了解我在数据库(mySQL)中的爬网情况。

所以我需要任何errback东西来记录到数据库中。

是否可以传递errback到管道?我目前的设置如下:

响应 ->(项目)-> 管道

当管道启动时,它会为该爬网创建一个条目(通过open_spider)。然后将该条目的表 ID 作为变量存储在管道中。这就是为什么我无法errback通过蜘蛛本身记录。

或者有没有办法将crawl_idID 从管道传递到蜘蛛errback

0 投票
1 回答
277 浏览

scrapy - 为什么在 Scrapy 中,抓取的文本在蜘蛛中是字符串,但在管道中是列表?

有人可以向我解释一下吗?
在我的蜘蛛中,我有使用 XPath 提取数据的代码。

我得到的是:

我明白这一点,我把它作为一个字符串(Unicode),因为我使用了 .extract_first() 这就是我想要的。

但在我的管道中,

我有它作为一个列表

这对我来说不是什么大问题,但它很烦人,因为每次我想访问它时,我都需要在它的末尾添加 [0]。例如。项目['price_euro'][0]

我可以禁用它吗?我应该禁用它吗?
这背后的逻辑是什么?

谢谢

我如何添加 price_euro

0 投票
0 回答
559 浏览

python - Scrapy:在屈服之前在不同的功能上多次操作相同的项目

我有一个蜘蛛,它从网页上抓取数据并将标题、文本和 img url 写入 mongoDB。

我有两个功能:

我希望将item['Gallery']提取的 img 的 URL 存储为一个数组,并在循环完成时将它们写入 mongoDB。

所以要传递item['Gallery']给第二个函数,添加 img url 并在 if 循环完成时获取数据以产生或写入 mongodb。

为什么需要这样做:我面临的问题是提取画廊的图像 URL。图库没有所有图像的列表,但您必须单击下一步才能获取下一个图像 URL。单击图库中的下一张图片时,它会刷新整个页面并更改页面的 URL,如下所示:

http://www.website.com/news-1-title/2/#gallery_photo用于第二张图片和/3/#gallery_photo第三张图片,依此类推。

该函数从 2-5 循环并检查是否有 img url 并提取它。

提前致谢