问题标签 [scrapy-spider]

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 投票
2 回答
3476 浏览

python - 在 __init__ 上的 scrapy 管道中使用参数

我有一个scrapy pipelines.py,我想得到给定的参数。在我的 spider.py 中,它完美运行:

现在,我需要我的 pipelines.py 中的“user_id”来创建像“domain-123.db”这样的 sqlite 数据库。我在整个网络上搜索我的问题,但我找不到任何解决方案。

有人能帮我吗?

PS:是的,我在我的管道类中尝试了 super() 函数,比如 spyer.py,它不起作用。

0 投票
2 回答
1079 浏览

python - 是否可以将数据抓取到两个不同的数据库表?

我正在使用 scrapy 来抓取网站数据,但我想将其存储在数据库中。

我当前的代码是这样的:

像“about_company”和“company”这样的一些项目将属于一个table2,其余的属于另一个table1。Table2 将有一个 job_id,它是 table1 的唯一 ID。

我如何实现这一目标?

(PS - 我正在使用带有 sqlalchemy 的 postgresql。

编辑: 这是我在 pipelines.py 中所做的另一次尝试:

不过,我没有得到我的job_id。

0 投票
1 回答
617 浏览

python - 构造 Scrapy Request 对象时可以指定任何方法作为回调吗?

我正在尝试创建一个请求,并且之前一直在我的蜘蛛类中传递一个函数作为回调。但是,我已经将该函数移到了 Item 子类,因为我希望有不同类型的 Items 并且每种项目的回调可能不同(例如,此时我将提出 DropItem 如果内容类型与预期不符,并且每种类型的项目都有一组不同的有效 MIME 类型)。所以,我想知道的是我可以从我的 Item 子类中传递一个函数作为回调参数吗?基本上是这样的:

暂时item.parse_resource_metadata没有接到电话。印刷req.callback

所以它至少像我希望的那样构建请求。

[编辑] 过失,回调没有被调用,因为开始页面没有被抓取(我不得不覆盖parse_start_url()。但事实证明我做错了,我问的太好了!

0 投票
1 回答
588 浏览

scrapy - CrawlSpider:请求前忽略 URL

我有一个 CrawlSpider 派生的蜘蛛。当 url 具有某种格式时,它会对名为 parse_item 的函数进行回调。

我的蜘蛛有一个状态 only_new=True。启用此状态后,我不想抓取数据库中已经存在的 url。

我想在请求完成之前检查 url,因为当我有 5 个新的详细信息页面我想抓取但 1000 个我不想抓取的详细信息页面时,我想发送 5 个请求而不是 1000 个。

但是在回调函数中,请求已经完成了。我想做如下的事情:

这可以通过中间件或其他方式实现吗?

0 投票
0 回答
322 浏览

scrapy - scrapy 处理希伯来语(非英语)语言

我正在使用scrapy来废弃一个希伯来语网站。然而,即使在将报废的数据编码为 UTF-8 之后,我也无法获得 hewbrew 字符。在 CSV 中获取奇怪的字符串(× ×¨×¡×™ ×'עמ)。但是,如果我检查打印相同的项目,我可以在终端上看到正确的字符串。以下是我正在使用的网站。 http://www.moch.gov.il/rasham_hakablanim/Pages/pinkas_hakablanim.aspx

奇怪的是,如果我在记事本 ++ 中打开相同的 csv。我能够看到正确的输出。所以作为一种解决方法。我所做的是,我在 notepad++ 中打开了 csv 并将编码更改为 UTF-8。并保存了它。现在,当我再次在 excel 中打开 csv 时,它会显示正确的希伯来语字符串。

无论如何从 scrapy 中指定 CSV 编码?

0 投票
1 回答
641 浏览

ajax - scrapy 通过 post 方法获取数据但得到 403

我同时使用 F12(Chrome) 和邮递员在现场检查请求及其详细信息

http://www.zhihu.com/

(邮箱:jianguo.bai@hirebigdata.cn,密码:wsc111111),然后转到

http://www.zhihu.com/people/hynuza/columns/followed

我想获取 Hynuza 关注的所有列,目前为 105。打开页面时,只有20个,然后我需要向下滚动才能获得更多。每次我向下滚动请求的详细信息都是这样的:

然后我使用邮递员来模拟这样的请求:

在此处输入图像描述

正如你所看到的,它得到了我想要的,即使我注销了这个站点,它也能正常工作。

根据所有这些,我这样写我的蜘蛛:

然后我得到这样的403:

所以它永远不会进入parse_more.

我已经工作了两天,仍然一无所获,任何帮助或建议将不胜感激。

0 投票
1 回答
6655 浏览

python - Scrapy 模拟 XHR 请求 - 返回 400

我正在尝试从使用 Ajax 的站点获取数据。页面加载,然后 Javascript 请求内容。有关详细信息,请参阅此页面:https ://www.tele2.no/mobiletelefon.aspx

问题是,当我尝试通过调用此 url 来模拟此过程时: https ://www.tele2.no/Services/Webshop/FilterService.svc/ApplyPhoneFilters

我收到 400 响应,告诉我该请求不被允许。这是我的代码:

我是scrapy和python的新手,所以我可能缺少一些明显的东西

0 投票
1 回答
109 浏览

python - xpath 之前的子问题

构建一个 webscraper 来抓取这个页面http://espn.go.com/nba/teams以便使用 scrapy python 库将所有​​团队名称及其对应的部门填充到数据库中。我正在尝试编写我的解析函数,但是我仍然不完全了解如何提取相应的部门名称以匹配每个团队。

[1] https://www.dropbox.com/s/jv1n49rg4p6p2yh/2014-12-29%2014.08.07-2.jpg?dl=0

我的解析函数能够返回一个团队列表和一个列出所有部门的相应部门列表。现在我并不是真的如何指定确切的部门,因为在我看来,我必须从所选的团队名称导航(由 item['team'] = sel.xpath(mex + "/div/h5 /a/text()")[i] )通过使用前面的子关系(将包括一个我一直在关注的网站作为教程但我没有 10 个声誉点)来获取 DOM正确的划分,但我不知道如何写...

如果我在这方面走错了路,请告诉我,因为我不是 XPath 专家。实际上,我什至不确定是否需要一个计数器,就好像我删除了 [i] 然后我只得到了 30 个包含所有 30 个团队的列表。

0 投票
2 回答
811 浏览

python - Scrapy 不会抓取所有 start_url 的

我有一个 ~2211 起始 url 的列表,scrapy 抓取了一些,但不是全部。当我将 start_url 设置为单个 url 时,它会抓取 URL,如果我的 URL 在一个大列表中,scrapy 不会抓取。

是否设置了限制start_urls

我的代码:

0 投票
1 回答
1519 浏览

python - 启动 Scrapy 项目时出错

当我尝试开始scrapy时,我收到了这个错误。为什么会出现?

$ scrapy startproject tutorial Traceback(最近一次调用最后一次):文件“/Applications/anaconda/bin/scrapy”,第 5 行,in from pkg_resources import load_entry_point File“/Applications/anaconda/lib/python2.7/site-packages/setuptools -2.1-py2.7.egg/pkg_resources.py”,第 2697 行,在文件“/Applications/anaconda/lib/python2.7/site-packages/setuptools-2.1-py2.7.egg/pkg_resources.py”中,第 669 行,在要求文件“/Applications/anaconda/lib/python2.7/site-packages/setuptools-2.1-py2.7.egg/pkg_resources.py”中,第 572 行,在解析 pkg_resources.DistributionNotFound: cryptography>=0.2 .1 美元