【问题标题】:Change relative url with CURL [duplicate]使用 CURL 更改相对 url [重复]
【发布时间】: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;

?>

Live example at phpfiddle

【问题讨论】:

  • 那是因为你正在使用正则表达式来添加你的元素。最简单的方法是使用 DOMDocument。它不适用于您链接的示例网站的具体原因是因为它有&lt;head profile=...&gt; 而不仅仅是&lt;head&gt;
  • @Jon “DOMDocument”是什么意思? Javascript?
  • @Youss php.net/DOMDocument - 另外这不适用于已经有不同 &lt;base href 的网站。
  • @hakre 感谢您的链接:)
  • 但是我这边的-1:这个问题没有显示任何研究工作;不清楚或没用。最好先了解为什么 事情不工作,而不是在这里转储代码,只是问为什么不工作。我敢打赌你比这更聪明。

标签: php curl relative-path relative-url


【解决方案1】:

您的问题出在正则表达式中。

您正在寻找&lt;head&gt;,但给定示例的网站有一个&lt;head profile="http://gmpg.org/xfn/11"&gt;

将正则表达式替换为:

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

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2011-06-23
    • 2018-08-25
    • 1970-01-01
    • 2013-08-14
    • 2010-10-04
    相关资源
    最近更新 更多