【发布时间】:2012-12-03 07:16:22
【问题描述】:
我想做的事: 使用 Simple 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,但是有很多可能的情况,我完全不知道如何才能覆盖所有基础。
但是,我敢肯定有很多人以前遇到过这个问题 - 这就是我求助于你的原因!
P.S 我想这个问题几乎可以简化为只处理本地hrefs,但如上所述,我遇到过//en.wikipedia.org/,它不是一个完整的网址,但也不是本地的。
【问题讨论】:
-
为此使用正则表达式,请参阅此处的正则表达式stackoverflow.com/questions/833469/regular-expression-for-url
-
你需要刮很多页吗?因为除了使用刮板,您还可以使用无头 javascript (phantomjs.org),因此您可以使用 javascript 获取 url。然而,这意味着它比仅仅抓取它要慢得多。
-
我认为你的问题应该简化为:如何在 PHP 中结合绝对 url 和相对 url。
-
为什么你不能只检查 URL 是否以
http://开头,如果不是,只需连接你正在抓取的 URL。 (如果 URL 以 / 开头,您只需将其与基本 URL 连接。) -
@DC_ 我试过这个,但偶然发现了一些问题,如上:抓取
http://en.wikipedia.org/wiki/Leaf(基本URL),我得到/wiki/Cataphyll之类的链接。连接:http://en.wikipedia.org/wiki/Leaf/wiki/Cataphyll...这没有多大意义。我原以为/wiki/Cataphyll应该链接到http://en.wikipedia.org/wiki/wiki/Cataphyll,因为它的开头有一个'/',但它实际上链接到http://en.wikipedia.org/wiki/Cataphyll
标签: php web-crawler simple-html-dom