抓取工具编码:确定是否已抓取网页?

时间:2010-08-27 23:46:57

标签: php web-crawler

我正在使用PHP中的爬虫程序,它希望 m URL找到一组 n 链接到 n 页面(内部页面)被抓取的数据。可以在 n 链接集中添加或删除链接。我需要跟踪链接/页面,以便我知道哪些已被抓取,哪些被删除以及哪些是新的。

我应该如何跟踪哪些m和n页面被抓取,以便下次抓取获取新网址,重新检查仍然存在的网址并忽略过时的网址?

1 个答案:

答案 0 :(得分:1)

如果要长期存储这些数据,请使用数据库。您可以将已爬网的m个URL及其n个URL与其状态存储在数据库中。当您再次抓取时,首先检查数据库是否有已抓取的网址。

例如:

将您的mURL存储在 mtable 中,如下所示:

 id |        mURL           | status       |    crawlingDate
------------------------------------------------------------------
 1  | example.com/one.php   | crawled      |   01-01-2010 12:30:00
 2  | example.com/two.php   | crawled      |   01-01-2010 12:35:10
 3  | example.com/three.php | not-crawled  |   01-01-2010 12:40:33

现在从 mtable 中获取每个mURL并获取所有n个网址并将其存储在 ntable 中,如下所示:

 id |        nURL             | mURL_id |  status      | crawlingDate
----------------------------------------------------------------------------
 1  | www.one.com/page1.php   |    1    |  crawled     | 01-01-2010 12:31:00
 2  | www.one.com/page2.php   |    1    |  crawled     | 01-01-2010 12:32:00
 3  | www.two.com/page1.php   |    2    |  crawled     | 01-01-2010 12:36:00
 4  | www.two.com/page2.php   |    2    |  crawled     | 01-01-2010 12:37:00
 5  | www.three.com/page1.php |    3    |  not-crawled | 01-01-2010 12:41:00
 6  | www.three.com/page2.php |    3    |  not-crawled | 01-01-2010 12:42:00

下次抓取时,首先从 mtable 逐个获取所有记录,并从每个mURL获取所有nURL。现在将所有nURL存储在 ntable 中(如果它尚不存在)。现在开始抓取每个nURL,以获取未抓取状态的数据,并在完成后将状态设置为已抓取。完成一个mURL的所有nURL后,您可以在 mtable 中为该mURL的状态设置已爬网

如果您不想使用数据库并想要一次性运行爬虫,那么您可以在数组中使用此逻辑。

这可能对你有所帮助。