【问题标题】:Why do I have an empty Array as result while fetching content?为什么在获取内容时我有一个空数组?
【发布时间】:2015-08-20 08:50:04
【问题描述】:
<?php
    $page = file_get_contents("https://www.google.com");

    preg_match('#<div id="searchform" class="jhp big">(.*?)</div>#Uis', $page, $matches);

    print_r($matches);
    ?>

我编写的以下代码必须抓取另一个网页的特定部分(在本例中为 google)。不幸的是它不起作用,我不知道为什么(因为正则表达式本身正在抓取 div 内的所有内容)。

我们将不胜感激!

【问题讨论】:

  • 在处理 HTML 时应该使用 HTML/XML 解析器。正则表达式是一种通用 解决方案,解析器是专门构建的解决方案。如果存在,请始终使用专门构建的解决方案。
  • 它可以在您自己的网站上使用吗?
  • U 反转贪婪/懒惰的量词,我猜这就是这里的问题。删除U 修饰符,.*? 将匹配尽可能少的字符。但是,为什么要使用正则表达式来获取 HTML 标签内容呢?使用 DOM 解析器。

标签: php regex


【解决方案1】:

根据您粘贴的页面来源,不存在具有该结构的行。这是不推荐使用正则表达式解析 HTML 的一个原因。

使用getElementById() 似乎可以满足您的需求:

<?php
$page = file_get_contents("https://www.google.com");

$doc = new DOMDocument();
$doc->loadHTML($page);
$result = $doc->getElementById('searchform');

print_r($result);
?>

编辑:

您可以使用以下代码:

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://google.com');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);


$page = curl_exec($curl);
curl_close($curl);

$doc = new DOMDocument();
$doc->loadHTML($page);
echo($page);
$result = $doc->getElementById('searchform');
print_r($result);
?>

您可能需要参考this 问题,因为您可能需要更改一些设置。

【讨论】:

  • 我收到错误 404 文件未找到 / 302 文件已移动。在我尝试的每一个网站上
  • @Testuser075:你以前没有遇到过这个错误吗?因为这与您最初使用的方法相同。
  • 不是当我直接回显从 file_get_contents 检索到的输出时
  • @Testuser075:我前段时间编辑了我的问题,不知道它是否对您的问题有帮助。
  • 我没有注意到您已经编辑了帖子。不幸的是,它并没有帮助我更进一步。我想用正则表达式写下来(如果可能的话)。您发布的另一个解决方案也很棒(DOMDocument),但找不到让它工作的解决方案:(
【解决方案2】:

DomxPath 对你来说是一个更好的选择,这里有一个例子。

<?php

$content = file_get_contents('https://www.google.com');

//gets rid of a few things that domdocument hates
$content = preg_replace("/&(?!(?:apos|quot|[gl]t|amp);|#)/", '&amp;', $content);

$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DomXPath($doc);


$item = $xpath->query('//div[@id="searchform"]');

【讨论】:

  • 我收到错误 404 文件未找到 / 302 文件已移动。在我尝试的每一个网站上
  • 我没有完全测试,我只是提供了一个样本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 2020-12-12
  • 2013-12-30
  • 2022-07-19
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多