每次运行Web抓取程序时,仅刮取新数据

时间:2014-03-13 14:51:12

标签: python web-scraping

我在python中有一个web抓取程序,它抓取一个网站并将数据保存在数据库中。我只想在抓取程序完成时将新信息保存在数据库中。有没有技术/想法呢?我正在使用的操作系统是ubuntu。

1 个答案:

答案 0 :(得分:1)

有时您可以查看上次修改日期的响应标头:

In [76]: url = 'http://python.org/ftp/python/3.2.2/Python-3.2.2.tar.bz2'

In [77]: import urllib

In [78]: d = urllib.urlopen(url)

In [79]: dict(d.info())
Out[79]: 
{'accept-ranges': 'bytes',
 'connection': 'close',
 'content-length': '10743647',
 'content-type': 'application/x-bzip2',
 'date': 'Thu, 13 Mar 2014 14:55:47 GMT',
 'etag': '"10c0008-a3ef5f-4ac0c2bd7f180"',
 'last-modified': 'Sat, 03 Sep 2011 16:43:02 GMT',
 'server': 'Apache/2.2.22 (Debian)'}

如果将last_modified日期存储在数据库中,则可以比较存储的日期与最新的last_modified日期,以确定是否应该再次下载数据。

但并非所有响应标头都包含last_modified标头。


另一种选择是使用UNIQUE约束创建数据库表,然后使用INSERT IGNORE命令插入数据,如果这样做会违反UNIQUE约束,则会跳过插入。有关如何执行此操作的详细信息取决于您使用的数据库。 (请注意,INSERT IGNORE是特定于MySQL的,sqlite3它将是INSERT OR IGNORE ...)。