php - 使用 PHP 的 HTML DOMDocument 解析 HTML

标签 php html parsing domdocument

我试图用“getElementsByTagName”来做这件事,但它没有用,我是使用 DOMDocument 解析 HTML 的新手,因为直到昨天我才使用正则表达式,这里有些人告诉我 DOMEDocument 会是更适合这份工作,所以我正在尝试 :)

我在谷歌上搜索了一段时间,寻找一些解释,但没有找到任何有用的东西(反正对类没有帮助)

所以我要抓取“抓取这段文字1”和“抓取这段文字2”等等。

看起来不难,但我想不通:(

<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>

最佳答案

如果你想得到:

  • 正文
  • <div>里面用 class="text" 标记
  • 它本身就在 <div> 中与 class="main"

我会说最简单的方法是不使用 DOMDocument::getElementsByTagName -- 这将返回所有具有特定名称的标签(而您只需要其中的一些标签)

相反,我会使用 DOMXpath 对您的文档使用 XPath 查询类。


例如,应该这样做,将 HTML 字符串加载到 DOM 对象中,并实例化 DOMXpath。类:

$html = <<<HTML
<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);


然后,您可以使用 XPath 查询,使用 DOMXPath::query 方法,返回您正在搜索的元素列表:

$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
    var_dump(trim($tag->nodeValue));
}


执行此操作会得到以下输出:

string 'Capture this text 1' (length=19)
string 'Capture this text 2' (length=19)

关于php - 使用 PHP 的 HTML DOMDocument 解析 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571232/

相关文章:

C strtok 和 strcpy

html - 通过 bash 从 html 中提取信息

php - 我应该将 superglobals 存储为包装类的属性还是应该直接访问它?

PHP/MySQL 联系人列表

php - 我可以使用什么逻辑来允许表列中存在 x 个值?

html - 如何使用广告拦截器屏蔽此元素

css - DIV 在 TD 内的 IMG 上

php - 如何选择时间戳列

html - CSS动画延迟(img显示时间)

java - 使用Retrofit进行JSON解析