好吧所以我一直在与此争斗一段时间,所以也许有人可以帮助我。
我试图从这个HTML获取电子邮件链接:
<div id="field_11" class="fieldRow span12 lastFieldRow">
<span class="caption">E-mail</span>
<span class="output">
<script type="text/javascript">
<!--
document.write('<a hr'+'ef="mai'+'lto'+':'+
'%40;%67;%6d;%61;%69;%6c;<\/a>');
//-->
</script>
<a href="mailto:%40%67%6d%61%69%6c">@mail</a>
</span>
</div>
我试图获得&#39; @ mail&#39;部分html代码,在a href =&#34; mailto:...&#34;之后部分。不是document.write()部分,而是代码中的最后一个标记。
出于某种原因,当我试图让标签的子项跨越输出类时,它认为它只有1个子节点,这是脚本标记,但我似乎无法抓取电子邮件纯文本。
到目前为止我所拥有的:
$target_url = "some_web_site";
$html = new simple_html_dom();
$html->load_file($target_url);
foreach($html->find('span[class=output]') as $d){
echo $d->children(1)->plaintext . "<br />";
}
任何帮助?
答案 0 :(得分:1)
也可以只使用DOM + Xpath。
$dom = new DOMDocument();
$dom->loadHtml($html);
//$dom->loadHtmlFile($htmlFile);
$xpath = new DOMXpath($dom);
var_dump(
$xpath->evaluate(
'string(//span[@class="output"]//a[starts-with(@href, "mailto:")])'
)
);
string(5) "@mail"
Xpath选择span
属性的所有class
元素&#34;输出&#34;
//span[@class="output"]
然后它会查找a
属性以&#34开头的href
元素; mailto:&#34;
//span[@class="output"]//a[starts-with(@href, "mailto:")]
结果是a
个元素节点列表(示例内容为单个节点)。 string()
函数将第一个节点强制转换为字符串,如果节点列表为空,则返回空字符串。
string(//span[@class="output"]//a[starts-with(@href, "mailto:")])