PHP:简单的HTMLDOM解析器-如何获取具有特定内容的元素?
在PHP中,我使用的是简单的HTMLDOM解析器类 我有一个HTML文件,它有多个a标签 现在我需要找到里面有特定文本的标签 例如:PHP:简单的HTMLDOM解析器-如何获取具有特定内容的元素?,php,web-scraping,simple-html-dom,Php,Web Scraping,Simple Html Dom,在PHP中,我使用的是简单的HTMLDOM解析器类 我有一个HTML文件,它有多个a标签 现在我需要找到里面有特定文本的标签 例如: $html = "<a id='tag1'>A</a> <a id='tag2'>B</a> <a id='tag3'>C</a> "; $dom = str_get_html($html); $tag = $dom->find("a
$html = "<a id='tag1'>A</a>
<a id='tag2'>B</a>
<a id='tag3'>C</a>
";
$dom = str_get_html($html);
$tag = $dom->find("a[plaintext=B]");
$html=“A
B
C
";
$dom=str_get_html($html);
$tag=$dom->find(“a[plaintext=B]”);
上面的示例不起作用,因为纯文本只能用作属性
有什么想法吗?
假设您要查找的每个特定文本只映射到一个链接(听起来像这样),您可以构建一个关联查找数组。我只是自己遇到了这种需要。我是这样处理的。这样你就不需要每次都循环通过所有的链接
<?php
include("simple_html_dom.php");
$html = "<a id='tag1'>A</a>
<a id='tag2'>B</a>
<a id='tag3'>C</a>
";
$dom = str_get_html($html);
$select = NULL;
foreach($dom->find('a') as $element) {
if ($element->innertext === "B") {
$select = $element;
break;
}
}
?>
function populateOutlines($htmlOutlines)
{
$marker = "courses";
$charSlashFwd = "/";
$outlines = array();
foreach ($htmlOutlines->find("a") as $element)
{
// filter links for ones with certain markers if required
if (strpos($element->href, $marker) !== false)
{
// construct the key the way you need it
$dir = explode($charSlashFwd, $element->href);
$code = preg_replace(
"/[^a-zA-Z0-9 ]/", "", strtoupper(
$dir[1]." ".$dir[2]));
// insert the lookup entry
$outlines[$code] = $element->href;
}
}
return $outlines;
}
// ...stuff...
$htmlOutlines = file_get_html($urlOutlines);
$outlines = populateOutlines($htmlOutlines);
// ...more stuff...
if (array_key_exists($code, $outlines)) {
$outline = $outlines[$code];
} else {
$outline = "n/a";
}
在普通XPath中,它应该是a[content()=“B”]
。问题是:simplehtmldom支持这一点吗?正常的DOM
和DOMXPath
将…这是可行的,但需要在1个find()表达式中获得它,因为我需要使用来自数据库的表达式制作数百个不同的刮刀。我认为没有其他方法。或者,您可以更新simple_html_dom.php代码,并向其添加查找innertext搜索功能。我不知道它是否会比上面的代码更有效,除非在内部文本上有某种散列。