我正在编写一个基本的爬虫程序,它只是用PHP来缓存页面。
所有这一切都是使用get_file_contents
获取网页内容和正则表达式以获取所有链接<a href="URL">DESCRIPTION</a>
- 在它返回时:
Array {
[url] => URL
[desc] => DESCRIPTION
}
我遇到的问题是找出确定页面链接是本地链接还是确定它是否位于完全不同的本地目录中的逻辑。
它可以是任意数量的组合:即href="../folder/folder2/blah/page.html"
或href="google.com"
或href="page.html"
- 可能性无穷无尽。
接近这个的正确算法是什么?我不想丢失任何重要的数据。
答案 0 :(得分:3)
首先,正则表达式和HTML不混合。使用:
foreach(DOMDocument::loadHTML($source)->getElementsByTagName('a') as $a)
{
$a->getAttribute('href');
}
可能在您网站之外的链接以协议或//
开头,即
http://example.com
//example.com/
href="google.com"
是指向本地文件的链接。
但是,如果您想创建网站的静态副本,为什么不使用wget
?
答案 1 :(得分:1)
让我们首先考虑本地链接的属性。
这些将是:
如果链接是本地的,那么您需要识别所有逻辑。
使用 parse_url 功能分离出网址的不同组件,以识别方案和主机。
答案 2 :(得分:0)
您必须在href中查找http://。否则,您可以确定它是以./开头还是以“./”的任意组合开头。如果您没有找到“/”,那么您将不得不假设它是一个文件。你想要一个脚本吗?