python - PHP DOM-Document 和 XPath:获取类数据
问题描述
我在尝试使用 DOM 解析跨度 cass 中的文本时遇到问题。这是我的代码示例。尝试从网页中提取一些行 - 使用以下技术:使用 DOMDocument 提取元素的属性值
以下是我收集和学习的内容:
$remote = "http://website.com/";
$doc = new DOMDocument();
@$doc->loadHTMLFile($remote);
$xpath = new DOMXpath($doc);
$node = $xpath->query('//span[@class="user"]');
echo $node;
这将返回以下错误->“可捕获的致命错误:DOMNodeList 类的对象无法转换为字符串”。我很迷茫。。
我想做的是解析这个标签之间的用户名;
<div class="widget plugin-meta">
<h3 class="screen-reader-text">Meta</h3>
见下文:
这里是具体示例视图源:https ://wordpress.org/plugins/participants-database/ 和https://wordpress.org/plugins/participants-database/
**goal:** i need the following data:
版本:上次更新:活动安装:已测试:
查看源代码:https ://wordpress.org/plugins/participants-database/
诉讼;我检查了网页的来源。我试图找出 texte 是否与某种模式有关。我仔细观察发现它们都有 class=”widget plugin-meta”。好吧-这将使提取它们变得轻而易举。我尝试使用下面的代码有助于根据属性值过滤 html 元素。
但不幸的是,结果很糟糕;我需要帮助,需要知道如何解析上述数据
目标:我需要以下数据:版本:上次更新:活动安装:测试:
解决方案
Xpath 表达式可以返回节点列表或标量值 - 取决于表达式。但是DOMXpath::query()
(和SimpleXMLElement::xpath()
)仅支持节点列表返回值。对于标量结果,您需要使用DOMXpath::evaluate()
. Xpath 允许string()
将第一个找到的节点转换为字符串的功能。
$html = <<<'HTML'
<div class="widget plugin-meta">
<h3 class="screen-reader-text">Meta</h3>
</div>
HTML;
$document = new DOMDocument();
@$document->loadHTML($html);
$xpath = new DOMXpath($document);
echo $xpath->evaluate('string(//h3[@class="screen-reader-text"])');
如果您期望多个节点,则需要迭代它们并获取它们的文本内容。
foreach ($xpath->evaluate('//h3[@class="screen-reader-text"]') as $h3) {
echo $h3->textContent;
}
plugin
如果您想避免部分匹配(例如作为 的一部分) ,匹配类属性会稍微复杂一些plugin-meta
。它们是由空格分隔的标记列表。Xpath 1.0 没有直接匹配它的功能。但它具有连接和规范化字符串的方法。
$expression = '//div[contains(concat(" ", normalize-space(@class), " "), " plugin-meta ")]/h3';
foreach ($xpath->evaluate($expression) as $h3) {
echo $h3->textContent;
}
推荐阅读
- reactjs - 使用 useState 时,Reactjs 不会立即更新分配的值
- python - 在 python 中分类后,每周和每年对数据进行分组
- r - 在 r 中动画制图时在 gganimate 中出现旧的 api 错误
- java - javax:将json数组映射到对象列表
- android - 任务 ':app:minifyReleaseWithR8' 执行失败。无法约束类型:@Null NULL 值:... 通过约束:INT
- javascript - Polarion SDK:在工作流程上下文中设置文档名称
- android - TextView.setText 不更新
- c++ - C++ 输入验证 - 程序正在读取错误的值/未读取值
- sql - SQL Server 更新使用三表连接
- excel - Excel VBA - 从一系列单元格中复制并粘贴到一个单元格中