使用python和sqlite进行网页抓取。如何有效地存储抓取的数据?

bet*_*eta 5 python sqlite web-scraping

我想定期(例如每小时)抓取一些特定的网页。我想用python做。抓取的结果应插入到SQLite表中。新信息将被删除,但是“旧”信息将再次被删除,因为python脚本将每小时运行一次。

更准确地说,我想抓取一个体育比赛结果页面,随着比赛的进行,越来越多的比赛结果发布在同一页面上。因此,对于每个新的抓取,我只需要将新结果输入到SQLite表中,因为较早的结果已经在一小时(甚至更早)之前就被抓取了(并插入到表中)。

当第二次被抓取时,我也不想插入相同的结果两次。因此,应该有某种机制来检查是否已刮取一个结果。可以在SQL级别完成吗?因此,我刮了整个页面,INSERT为每个结果创建一个语句,但是只有那些INSERT成功执行的语句才在数据库中不存在。我在想类似UNIQUE关键字之类的东西。

还是我对性能的考虑太多了,应该在DROP TABLE每次开始抓取然后再次从头开始抓取所有内容之前,通过每次操作来解决此问题?我不会谈论太多数据。一年大约有100场比赛的记录(=比赛)。

基本上,我只会对某种最佳实践方法感兴趣。

dm0*_*514 2

看起来如果数据不存在就想插入?也许是这样的:

  1. 检查条目是否存在
  2. 如果没有则插入数据
  3. 如果有的话更新条目吗?(你想更新吗)

您可以发出 2 个单独的 sql 语句 SELECT 然后 INSERT/UPDATE

或者你可以设置唯一,我相信 sqllite 会提出IntegrityError

try:
  # your insert here
  pass
except sqlite.IntegrityError:
  # data is duplicate insert
  pass
Run Code Online (Sandbox Code Playgroud)