问题标签 [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.
scrapy - Scrapy - 基于条件的爬取
我有以下 Scrapy 解析方法:
这会将提取的图像 URL 发送到 ImagePipelines。如果满足某个条件,我需要让 Scrapy 从该页面抓取其他链接......类似于......图像内容的校验和与哈希列表匹配。
我的问题是,一旦在 ImagesPipeline 中完成并填充了所有数据,我不知道如何访问该项目。item['images_matched']
解析方法中没有填充含义,而是在管道中填充了含义。在访问该项目或对此的不同方法方面需要帮助
编辑:我发现在 之后添加以下内容是yield
有效的。
然而,这对我来说似乎是非常糟糕的编码,因为项目字典有时可能非常大。传递它只是为了检查一个属性是很奇怪的。有没有更好的办法?
scrapy - 通过 Scrapy-Splash 返回图像内容
我正在使用 Scrapy-Splash 请求来获取页面的渲染屏幕截图,但我还需要该页面上的图像。我使用管道下载这些图像,但我在想 - 这不会对同一个图像提出两个请求吗?一次是在 Splash 呈现页面时,一次是在我发送下载请求时。有没有办法获得 Scrapy-Splash 请求返回的图像?
scrapy - 跳过下载但不跳过scrapy管道中的其他任务
有没有办法可以跳过下载网页,但在执行后仍然有管道的其他部分?
目前,我在 中读取了一个 json 对象文件start_requests
,每个json对象都有一个网站 URL 和其他数据字段。如果网站 URL 不为空,它会产生一个请求对象,否则会跳过它。
在另一个函数parse
中,我创建了项目对象,之后数据库管道就出现了。
即使网站 url 为空,我也想插入其他start_requests
数据字段,在这种情况下不会创建请求对象。
python-3.x - 无法通过scrapy管道传递空url
我有一个数据对象列表,每个对象都包含一个要抓取的 url。其中一些 url 无效,但我仍然希望数据对象通过以到达项目管道。
在@tomáš-linhart 回复之后,我了解到在这种情况下使用中间件将不起作用,因为scrapy 不允许我首先创建请求对象。
如果 url 无效,另一种方法是返回 item 而不是 request。
以下是我的代码:
上面的代码抛出了一个错误,如图所示。除了错误之外,我不确定如何追踪问题的根源。:(
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 网址是否是一个有效的梦想
我将非常感谢您对我的问题的经验丰富的意见。
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()
方法中区分正常关闭和错误关闭。
python - Scrapy文件下载如何使用自定义文件名
对于我的scrapy项目,我目前正在使用FilesPipeline。下载的文件以 URL 的 SHA1 哈希值作为文件名存储。
如何使用我的自定义文件名来存储文件?
在上面的示例中,我希望文件名是“product1_0a79c461a4062ac383dc4fade7bc09f1384a3910.pdf”,所以我保持唯一性但使文件名可见。
作为一个起点,我探索了pipelines.py
我的项目,但没有取得多大成功。
将此参数包含在我的settings.py
有人提出了类似的问题,但它确实针对图像而不是文件。
任何帮助将不胜感激。
scrapy - Scrapy 将 HTTP 错误记录到数据库或管道
我正在尝试全面了解我在数据库(mySQL)中的爬网情况。
所以我需要任何errback
东西来记录到数据库中。
是否可以传递errback
到管道?我目前的设置如下:
响应 ->(项目)-> 管道
当管道启动时,它会为该爬网创建一个条目(通过open_spider
)。然后将该条目的表 ID 作为变量存储在管道中。这就是为什么我无法errback
通过蜘蛛本身记录。
或者有没有办法将crawl_id
ID 从管道传递到蜘蛛errback
?
scrapy - 为什么在 Scrapy 中,抓取的文本在蜘蛛中是字符串,但在管道中是列表?
有人可以向我解释一下吗?
在我的蜘蛛中,我有使用 XPath 提取数据的代码。
我得到的是:
我明白这一点,我把它作为一个字符串(Unicode),因为我使用了 .extract_first() 这就是我想要的。
但在我的管道中,
我有它作为一个列表
这对我来说不是什么大问题,但它很烦人,因为每次我想访问它时,我都需要在它的末尾添加 [0]。例如。项目['price_euro'][0]
我可以禁用它吗?我应该禁用它吗?
这背后的逻辑是什么?
谢谢
我如何添加 price_euro
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 并提取它。
提前致谢