2

我想做的事:使用简单的 HTML DOM 对页面中的所有链接进行缩放,同时注意获取完整链接(即从http://一直到地址的末尾)。

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

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

我已经尝试了很多不同的技术来构建实际的完整 URL,但是有很多可能的情况,我完全不知道如何才能覆盖所有基础。

但是,我敢肯定有很多人以前遇到过这个问题——这就是我求助于你的原因!

PS 我想这个问题几乎可以简化为只处理 local hrefs,但如上所述,我遇到了//en.wikipedia.org/which 不是完整的 url,但不是本地的。

4

4 回答 4

1

您需要一个将相对 URL 转换为绝对 URL 的库。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:如何解析库列表的相对 url。

于 2012-12-06T02:50:25.163 回答
1

我想这就是你要找的。它在一个旧项目上对我有用。

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

于 2012-12-06T00:48:12.327 回答
0

好的,谢谢大家的意见。

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

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

于 2012-12-03T13:48:16.470 回答
0

我不知道这是否是您要查找的内容,但这将为您提供执行它的页面的完整 URL:

window.location.href

希望能帮助到你。

于 2012-12-03T07:23:35.660 回答