问题描述
我在烧瓶中运行一个爬虫蜘蛛,并使用烧瓶 sqlAlchemy 将数据添加到 postgres 数据库。蜘蛛有一个 process_item
函数,每次从网站收集数据时都会执行该函数。每次抓取网站时,该网站都会添加到 merchants
表中并分配一个唯一 ID。此 ID 存储在变量 merchant_id
中,并用作在 requisites
表中查找第一个条目以更新表的 11 列之一的关系。
这是我使用的函数
def process_item(self,item,spider):
requisite = Requisites.query.filter_by(merchant_id=self.merchant_id).first()
if requisite:
print(f"requisite True - {requisite}")
for key in item:
exec(f"requisite.{key} = item['{key}']")
db.session.commit()
else:
print(f"requisite False - {requisite}")
requisite = Requisites(website=self.website,merchant_id=self.merchant_id)
db.session.add(requisite)
for key in item:
exec(f"requisite.{key} = item['{key}']")
db.session.commit()
return item
在我的 requisites
表中,我总共有五个具有相同 merchant_id
的条目。这些条目中的每一个在 requisites
表中都有自己的唯一 ID。
我注意到只有在第一次执行 process_item
时才会填充第一条记录。所以我在函数中添加了 print(f"requisite True - {requisite}")
并注意到每次执行查询时都会返回 requisites 表中的下一个条目,而不是第一个条目,尽管我使用了 .first()。为什么会发生这种情况以及如何解决这个问题?
这是每次执行 process_item
时打印的内容:
requisite True - <Requisites 3>
requisite True - <Requisites 4>
requisite True - <Requisites 5>
requisite True - <Requisites 6>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)