【发布时间】:2013-04-29 06:53:57
【问题描述】:
我正在尝试使用 CURL 抓取一些网站。为了更改相对 URL,我插入了这个:
$curl_scraped_page = preg_replace("/<head>/i", "<head><base href='$url' />", $curl_scraped_page, 1);
它适用于大多数网站,但并非所有网站。例如这个网站“NS Website”显示完全没有效果,这意味着 URL 是用我的域作为基本 url 完成的:mydomain.com/css.css
这是我使用的完整代码:
<?php
$url = $_GET['url'];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
$curl_scraped_page = preg_replace("/<head>/i", "<head><base href='$url' />", $curl_scraped_page, 1);
curl_close($ch);
echo $curl_scraped_page;
?>
【问题讨论】:
-
那是因为你正在使用正则表达式来添加你的元素。最简单的方法是使用 DOMDocument。它不适用于您链接的示例网站的具体原因是因为它有
<head profile=...>而不仅仅是<head>。 -
@Jon “DOMDocument”是什么意思? Javascript?
-
@Youss php.net/DOMDocument - 另外这不适用于已经有不同
<base href的网站。 -
@hakre 感谢您的链接:)
-
但是我这边的-1:这个问题没有显示任何研究工作;不清楚或没用。最好先了解为什么 事情不工作,而不是在这里转储代码,只是问为什么不工作。我敢打赌你比这更聪明。
标签: php curl relative-path relative-url