2

我正在尝试通过 mysql 管道将我的蜘蛛抓取的项目放入 mysql 数据库中。一切正常,但我看到一些奇怪的行为。我看到数据库的填充与网站本身的顺序不同。就像一个随机的顺序。我猜可能是字典之类的项目列表。

我的问题是:

  1. 我怎样才能获得与网站本身的项目相同的订单。
  2. 我怎样才能颠倒问题1的这个顺序。

所以网站上的项目:

  • 一个
  • C
  • D

在我的 sql 中添加订单:

  • D
  • C
  • 一个
4

3 回答 3

1

没有实际代码很难说,但理论上..

Scrapy 是完全异步的,您无法知道将通过管道解析和处理的项目的顺序。

但是,您可以通过用priority键“标记”每个项目来控制行为。priority在您的Item类中添加一个字段,在parse_item您的蜘蛛的方法中priority根据网页上的位置设置,然后在您的管道中,您可以将此priority字段写入数据库(以便以后能够排序),或者收集类范围列表中的所有项目,并在close_spider方法中对列表进行排序并将其批量插入数据库。

希望有帮助。

于 2013-06-20T19:14:11.900 回答
0

如果您不强加,数据库中的项目没有特殊顺序。因此,您应该在数据库中的表中添加时间戳,使其保持最新(mysql 有一个特殊的标志来将字段标记为现在自动)并在查询中使用 ORDER BY。

于 2013-06-20T12:32:08.203 回答
0

首先,这是一个很好的问题。根据我的理解,Scrapy 在此处提供的深度搜索 上进行了深度搜索。因此,当您抓取网站时,它会进行深度搜索,然后自动更改您在网站中看到的内容的顺序并进行抓取。我更喜欢你用scrapy做广度搜索,那么我希望内容的排列方式不要改变

于 2013-06-21T05:51:00.490 回答