【问题标题】:How can i download and parse portion of web page?如何下载和解析网页的一部分?
【发布时间】:2012-04-10 16:23:32
【问题描述】:

我不想下载整个网页。这需要时间,而且需要大量内存。

如何下​​载该网页的部分内容?然后我会解析它。

假设我只需要下载<div id="entryPageContent" class="cssBaseOne">...</div>。我该怎么做?

【问题讨论】:

  • 你不能。除非您可以控制服务器并且可以自定义响应,否则不会。在这种情况下,您可以发回部分视图。
  • @Rob:服务器不能完全强制客户端在读取所有数据之前不要关闭套接字。

标签: php parsing curl wget


【解决方案1】:

您不能通过“仅这一段 HTML”下载 URL 的一部分。 HTTP 仅支持部分下载的字节范围,并且没有 HTML/XML 文档树的概念。

因此,您必须下载整个页面,将其加载到 DOM parser,然后仅提取您需要的部分。

例如

$html = file_get_contents('http://example.com/somepage.html');
$dom = new DOM();
$dom->loadHTML($html);
$div = $dom->getElementById('entryPageContent');

$content = $div->saveHTML();

【讨论】:

  • 对于 $html = file_get_contents('http://example.com/somepage.html'); ,它在哪里临时下载该文件?在记忆中?还是在硬盘的某个地方?
  • 它将直接进入 $html。如果你想把它写到磁盘上,你需要自己写出来。
  • 那么它是否将网页源存储到内存中?
  • PHP 变量定义为“在内存中”。您将获得该 url 的 html,仅此而已。 curl/file_get_contents 不是浏览器,不会“蜘蛛”页面并下载其中的所有内容。
【解决方案2】:

使用这个:

curl_setopt($ch, CURLOPT_RANGE, "0-10000");

将使 cURL 仅下载网页的前 10k 字节。此外,它仅在服务器端支持此功能时才有效。许多解释脚本(CGI、PHP、...)会忽略它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2018-04-18
    • 2018-08-20
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多