2013-05-05 102 views
-3

我试图使用CURL来抓取一些网站。为了改变相对URL的我已经插入这样的:使用CURL更改相对网址

$curl_scraped_page = preg_replace("/<head>/i", "<head><base href='$url' />", $curl_scraped_page, 1); 

它的工作好于大多数的网站,但不是所有的人。例如本网站“NS Website”节目的没有任何影响,这意味着该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; 

?> 

Live example at phpfiddle

+3

那是因为你使用正则表达式来添加元素:

替换为正则表达式。最简单的方法是使用DOMDocument。它不适用于你的链接示例网站的具体原因是因为它具有''而不仅仅是''。 – Jon 2013-05-05 09:33:56

+0

@Jon你说的“DOMDocument”是什么意思? JavaScript的? – Youss 2013-05-05 09:35:48

+1

@Youss http://php.net/DOMDocument - 对于已经有不同' hakre 2013-05-05 09:35:52

回答

1

你的问题是在正则表达式中。

您正在寻找<head>,但给出的示例网站有一个<head profile="http://gmpg.org/xfn/11">

$curl_scraped_page = preg_replace("/<head.*>/i", "<head><base href='$url' />", $curl_scraped_page, 1); 
+0

非常感谢你:) – Youss 2013-05-05 09:44:21