我正在尝试通过 mysql 管道将我的蜘蛛抓取的项目放入 mysql 数据库中。一切正常,但我看到一些奇怪的行为。我看到数据库的填充与网站本身的顺序不同。就像一个随机的顺序。我猜可能是字典之类的项目列表。
我的问题是:
- 我怎样才能获得与网站本身的项目相同的订单。
- 我怎样才能颠倒问题1的这个顺序。
所以网站上的项目:
- 一个
- 乙
- C
- D
- 乙
在我的 sql 中添加订单:
- 乙
- D
- C
- 乙
- 一个
没有实际代码很难说,但理论上..
Scrapy 是完全异步的,您无法知道将通过管道解析和处理的项目的顺序。
但是,您可以通过用priority
键“标记”每个项目来控制行为。priority
在您的Item
类中添加一个字段,在parse_item
您的蜘蛛的方法中priority
根据网页上的位置设置,然后在您的管道中,您可以将此priority
字段写入数据库(以便以后能够排序),或者收集类范围列表中的所有项目,并在close_spider
方法中对列表进行排序并将其批量插入数据库。
希望有帮助。
如果您不强加,数据库中的项目没有特殊顺序。因此,您应该在数据库中的表中添加时间戳,使其保持最新(mysql 有一个特殊的标志来将字段标记为现在自动)并在查询中使用 ORDER BY。
首先,这是一个很好的问题。根据我的理解,Scrapy 在此处提供的深度搜索 上进行了深度搜索。因此,当您抓取网站时,它会进行深度搜索,然后自动更改您在网站中看到的内容的顺序并进行抓取。我更喜欢你用scrapy做广度搜索,那么我希望内容的排列方式不要改变