使用简单的HTML DOM获取* absolute * URL

时间:2012-12-03 07:16:23

标签: php web-crawler simple-html-dom

我想做什么:使用简单HTML DOM从页面中查看所有链接,同时注意获取完整链接(即从http://一直到结束地址)。

我的问题:我收到/wiki/Cell_wall而不是http://www.wikipedia.com/wiki/Cell_wall的链接。

更多示例:如果我抓取网址:http://en.wikipedia.org/wiki/Leaf,我会收到/wiki/Cataphyll//en.wikipedia.org/等链接。或者如果我正在抓取http://php.net/manual/en/function.strpos.php,我会收到function.strripos.php之类的链接。

我尝试了很多不同的构建实际完整网址的技巧,但是有很多可能的情况让我完全不知道如何覆盖所有基础。

但是,我确定之前有很多人遇到过这个问题 - 这就是我转向你的原因!

PS我认为这个问题几乎可以简化为只处理本地href,但如上所述,我遇到//en.wikipedia.org/这不是一个完整的网址,但却不是本地

4 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西。它对我来说是一个古老的项目。

http://www.electrictoolbox.com/php-resolve-relative-urls-absolute/

答案 1 :(得分:1)

您需要一个将相对网址转换为绝对网址的库。 URL To Absolute似乎很受欢迎。那你就是:

require('url_to_absolute.php');

foreach($doc->find('a[href]') as $a){
  echo url_to_absolute('http://en.wikipedia.org/wiki/Leaf', $a->href) . "\n";
}

有关库的列表,请参阅PHP: How to resolve a relative url

答案 2 :(得分:0)

我不知道这是否是你要找的,但这将为你提供执行页面的完整网址:

window.location.href

希望它有所帮助。

答案 3 :(得分:0)

好的,谢谢大家的意见。

我认为解决方案是使用正则表达式查找任何特定URL的webroot,然后只需将本地地址附加到此。

棘手的部分: 设计适用于所有域的正则表达式语句,包括它们的子域......