问题标签 [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 回答
2761 浏览

python - Closing database connection from pipeline and middleware in Scrapy

I have a Scrapy project that uses custom middleware and a custom pipeline to check and store entries in a Postgres DB. The middleware looks a bit like this:

The pipeline looks similar:

It works fine, but I can't find a way to cleanly close these database connections when the spider finishes, which irks me.

Does anyone know how to do that?

0 投票
1 回答
1936 浏览

python - 将 file_name 参数传递给管道以在 scrapy 中导出 csv

我需要 scrapy 从命令行获取一个参数 (-a FILE_NAME="stuff") 并将其应用于在 pipelines.py 文件中的 CSVWriterPipeLine 中创建的文件。(我使用 pipeline.py 的原因是内置导出器重复数据并重复输出文件中的标头。相同的代码,但在管道中写入修复了它。)

我尝试从 scrapy.utils.project import get_project_settings 中看到

如何从项目管道访问scrapy设置

但我无法从命令行更改文件名。

我也尝试过实现页面上的@avaleske 解决方案,因为它专门解决了这个问题,但我不知道将他谈到的代码放在我的scrapy 文件夹中的什么位置。

帮助?

设置.py:

管道.py:

蜘蛛.py:

0 投票
2 回答
1445 浏览

python - Scrapy Item pipeline for multi spiders

I have 2 spiders and run it here:

and I want these spiders write a common file.

This is Pipeline class:

But although I don't get error message, when all spiders are done writing in the common file i have less lines (item) than the scrapy log does. A few lines are cut. Maybe there is some practice writing in one file simultaneously from two spiders?

UPDATE:

Thanks, everybody!) I implemented it this way:

0 投票
1 回答
1071 浏览

python - 保存抓取的项目和文件时,Scrapy 在输出 csv 文件中插入空行

我有 Scrapy(1.0.3 版)蜘蛛,在其中我从网页中提取一些数据并下载文件,如下所示(简化):

在 pipelines.py 我只是覆盖 FilePipeline 来更改文件的名称:

在 items.py 我有:

在 settings.py 我有:

现在在输出 csv 文件中我得到如下内容:

看起来空行(只有逗号)代表下载的文件,我想知道或获得如何防止这些行出现在输出 csv 文件中的建议。(文件保存在文件夹中)。
在 Scrapy 设置中,我发现了 FEED_STORE_EMPTY (默认情况下为 false,即它不应该导出空提要),但这与我猜的文件无关。
我觉得这必须与管道有关,但我不知道该怎么做。
任何帮助,将不胜感激

0 投票
2 回答
400 浏览

scrapy - Scrapy:使用管道替换不需要的非 ASCII 码

从 Scrapy 结果中,标题中有一个不需要的非 ASCII 代码\u2013(又名character(150)en dash),例如u'Director/Senior Director \u2013 Pathology'. 我正在尝试使用管道删除\u2013常规的,. 但是下面的代码不起作用。也不会报告错误消息。

0 投票
2 回答
1590 浏览

python - scrapy - 处理多种类型的项目 - 多个相关的 Django 模型并将它们保存到管道中的数据库

我有以下 Django 模型。我不确定在蜘蛛中使用scrapy管道将这些相互关联的对象扫描到Django中的数据库时,保存这些相互关联对象的最佳方法是什么。似乎scrapy管道仅用于处理一种“类型”的项目

模型.py

项目.py

蜘蛛.py

pipelines.py - 不知道在这里做什么

0 投票
1 回答
2515 浏览

mongodb - 使用 pymongo 和 scrapy 检查 MongoDB 中是否存在 id

我已经设置了一个带有scrapy的蜘蛛,它将数据发送到MongoDB数据库。我想检查 id 是否存在,如果存在,我可以在特定键上 $addToSet (否则 Mongo 将拒绝插入,因为 _id 已经存在)。

这是我的 pipelines.py:

我的 items.py 看起来像:

我的蜘蛛看起来像:

我在这一行的 pipelines.py 中遇到语法错误:

这是回溯:

我正在拔头发,因为我觉得我真的很接近让这个工作。在 robomongo 中,当我运行此查询时:

db.getCollection('logfile').find({'_id': 'Jim'})

它显示了吉姆的文件。我一生都无法弄清楚在 find() 中放置什么,以便它获取我正在抓取的当前页面的 _id。

任何帮助深表感谢。

0 投票
1 回答
1159 浏览

python - 无法使用scrapy从网站下载图像

我从 Scrapy 开始,以便自动从网站下载文件。作为测试,我想从这个网站下载 jpg 文件。我的代码基于Scrapy 网站上的介绍教程文件和图像管道教程。

我的代码是这样的:

在 settings.py 中,我添加了以下几行:

我的 items.py 文件是:

我的管道文件是:

最后,我的蜘蛛文件是:

理想情况下,我想下载所有 jpg,而不为所需的每个文件指定确切的网址

“scrapy crawl jpg”的输出是:

虽然似乎没有错误,但程序并未检索 jpg 文件。以防万一,我使用的是 Ubuntu。

0 投票
2 回答
1005 浏览

python - 了解scrapy框架架构

最近,我一直在尝试掌握scrapy。我觉得如果我对架构有更好的理解,我会走得更快。当前,我遇到的具体问题是:我想将scrapy提取的所有链接存储在数据库中,而不是响应,链接。这是为了进行完整性检查。

我最初的想法是process_links在 a 上使用参数并在它指向的函数中rule生成。items然而,虽然callback参数指向一个作为项目生成器的函数,但process_links参数的工作方式更像是一个过滤器。在该callback功能中,您产生项目,它们会被自动收集并放入管道中。在process_links函数中,您返回链接列表。您不生成项目。

我可以在process_links函数中建立一个数据库连接并直接写入数据库,但是当scrapy通过Twisted内置异步数据库事务处理时,这感觉不是正确的方法。

我可以尝试将项目从process_links函数传递给callback函数,但我不确定这两个函数之间的关系。一个用于生成项目,一个接收列表并返回列表。

在尝试思考这一点时,我不断遇到这样一个事实,即我不了解 scapy 中的控制循环。读取函数产生的项目的过程是什么callback?向函数提供链接并从process_links函数接收链接的过程是什么?requests取回的那个responses

从我的角度来看,我在一个流派的蜘蛛中编写代码items。会items 自动读取并通过管道移动。我可以在管道中创建代码,并且items会自动传入和传出该代码。items缺少的是我对这些如何通过管道移动的确切理解。

查看代码我可以看到蜘蛛的基本代码隐藏在角落里,所有好的蜘蛛都应该这样做,并以__init__.py. 它包含starts_requests() 和make_requests_from_url()函数,根据文档是起点。但这不是一个控制循环。它被别的东西调用了。

从相反的方向走,我可以看到,当我执行scrapy crawl...我正在调用的命令时crawl.py,它又调用self.crawler_process.start()crawler.py. 这启动了一个 Twisted 反应堆。还有core/engine.py另一个函数集合,看起来好像它们旨在控制蜘蛛的操作。

尽管浏览了代码,但我对整个过程并没有清晰的心理印象。我意识到框架的想法是它隐藏了很多复杂性,但我觉得通过更好地理解正在发生的事情,我可以更好地利用框架。

对不起,很长的帖子。如果有人可以回答我关于保存数据库链接的具体问题,那就太好了。如果您能够对架构进行简要概述,那将非常有帮助。

0 投票
1 回答
537 浏览

python - 使用mysql.connector的scrapy管道错误

我完全迷路了。这是我的管道。当我运行它时,我收到一条错误消息

正如您从注释代码中看到的那样,我尝试了几种不同的方法。起初,我按照在示例中看到的那样进行操作,但是当我将 (item['StoreName']) 放入 VALUES 行而不是在上面将其定义为 Name = item 时,我得到了一个错误,即未定义 sadi item ['StoreName'] 我正在使用从 mqsql.org 网站安装的 mySQL.connector。提前致谢

编辑。这是我的新代码

`