我正在使用PHP中的爬虫程序,它希望 m URL找到一组 n 链接到 n 页面(内部页面)被抓取的数据。可以在 n 链接集中添加或删除链接。我需要跟踪链接/页面,以便我知道哪些已被抓取,哪些被删除以及哪些是新的。
我应该如何跟踪哪些m和n页面被抓取,以便下次抓取获取新网址,重新检查仍然存在的网址并忽略过时的网址?
答案 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的状态设置已爬网。
如果您不想使用数据库并想要一次性运行爬虫,那么您可以在数组中使用此逻辑。
这可能对你有所帮助。