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

时间:2013-04-17 14:49:48

标签: python sqlite web-scraping

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

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

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

或者我是否在考虑性能问题,应该在每次开始抓取之前每次执行DROP TABLE来解决这个问题,然后再从头开始刮掉所有内容?我不是在谈论真正的数据。一场比赛只有约100场记录(=比赛),每年约有50场比赛。

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

2 个答案:

答案 0 :(得分:4)

你想要做的是一个upsert(更新或插入,如果它不存在)。 点击此处查看如何在sqlite中执行此操作:SQLite UPSERT - ON DUPLICATE KEY UPDATE

答案 1 :(得分:2)

如果数据不存在,您似乎想要插入数据?也许是这样的事情:

  1. 检查条目是否存在
  2. 插入数据(如果不是
  3. 如果有,请更新条目? (你想更新)
  4. 你可以发出2个单独的sql语句SELECT然后INSERT / UPDATE

    或者你可以设置唯一的,我的beileve sqllite会引发IntegrityError

    try:
      # your insert here
      pass
    except sqlite.IntegrityError:
      # data is duplicate insert
      pass