我正在抓取一个包含某种listings的Scrapy网站,并将新的列表存储在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的附加信息的最佳方法是什么?
发布于 2018-11-21 01:23:24
正如注释中所提到的,您可以创建一个组合标识符,例如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表中,您必须确保id和website_id的组合是唯一的。
https://stackoverflow.com/questions/53395411
复制相似问题