我想定期搜索一些特定的网页(例如每小时)。这我想用python做。应将已删除的结果插入到SQLite表中。新信息将被删除,但“旧”信息将再次被删除,因为python脚本将每小时运行。
更确切地说,我想抓一个体育成绩页面,越来越多的比赛结果在锦标赛进行的同一页面上发布。因此,对于每次新的抓取,我只需要在SQLite表中输入新的结果,因为较旧的结果已经在一小时之前(甚至更早)被抓取(并插入到表中)。
我也不想在第二次被刮掉时两次插入相同的结果。所以应该有一些机制来检查是否已经刮掉了一个结果。这可以在SQL级别完成吗?因此,我抓取整个页面,为每个结果创建一个INSERT
语句,但只有那些INSERT
语句才能成功执行,之前数据库中没有这些语句。我正在考虑类似UNIQUE
关键字的东西。
或者我是否在考虑性能问题,应该在每次开始抓取之前每次执行DROP TABLE
来解决这个问题,然后再从头开始刮掉所有内容?我不是在谈论真正的数据。一场比赛只有约100场记录(=比赛),每年约有50场比赛。
基本上我只对某种最佳实践方法感兴趣。
答案 0 :(得分:4)
你想要做的是一个upsert(更新或插入,如果它不存在)。 点击此处查看如何在sqlite中执行此操作:SQLite UPSERT - ON DUPLICATE KEY UPDATE
答案 1 :(得分:2)
如果数据不存在,您似乎想要插入数据?也许是这样的事情:
你可以发出2个单独的sql语句SELECT然后INSERT / UPDATE
或者你可以设置唯一的,我的beileve sqllite会引发IntegrityError
try:
# your insert here
pass
except sqlite.IntegrityError:
# data is duplicate insert
pass