首页 > 解决方案 > Scrapy/Python/MySQL:将附加项目信息保存在单独的表中的最佳方法是什么?

问题描述

我正在使用包含某种 Scrapy 的网站爬网,listings并将新列表存储在 MySQL 表中。对于每个listing我想price在单独的表中添加(当它发生变化时)。

我目前的做法

listings

<id> | guid | title | body | created_at
-------------------------------------

listing_prices

<id> | listing_id | price | created_at
------------------------------------

使用AddListingsToDatabase()管道保存新列表,然后使用AddPricesToDatabase()管道将新/更新的价格保存到数据库。

AddPricesToDatabase()我正在查询数据库以获取所有带有价格的列表。然后我检查价格是否发生变化并添加/更新价格。因此我需要listing.id.

到目前为止,这仅适用于在当前抓取之前已经在数据库中的列表。

我的问题

当我想向数据库添加新价格时,我需要数据库中的listing.id(auto_increment)。当我在AddPricesToDatabase()管道中查询数据库时,它还没有找到AddListingsToDatabase()管道新添加的列表。

我的问题

将额外信息保存Item在单独的表中的最佳方法是什么?

标签: pythonmysqlscrapy

解决方案


如评论中所述,您可以创建一个组合标识符,而不是自动增加您的标识符,例如website_id+listing_id它将唯一标识您的记录。

您可以将其存储在单个列中,也可以存储在两个单独的列中并创建一个组合键。

例如:

websites桌子:

<id> | website_url
------------------

listings桌子:

<id> | website_id | guid | title | body | created_at
----------------------------------------------------

listing_prices桌子:

<id> | website_id | listing_id | price | created_at
---------------------------------------------------

listings表中,您必须确保 和 的组合idwebsite_id唯一的。


推荐阅读