php简单DOM解析器

php简单DOM解析器,php,html,dom,simpledom,Php,Html,Dom,Simpledom,好吧,我已经为此奋斗了一段时间,也许有人能帮我 我正在尝试从以下HTML获取电子邮件链接: <div id="field_11" class="fieldRow span12 lastFieldRow"> <span class="caption">E-mail</span> <span class="output"> <script type="text/javascript"> <!-- doc

好吧,我已经为此奋斗了一段时间,也许有人能帮我

我正在尝试从以下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>

电子邮件

仅使用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:")])'
  )
);
输出:

Xpath选择具有
class
属性“output”的所有
span
元素

//span[@class=“output”]

然后查找
a
元素,其中
href
属性以“mailto:

//span[@class=“output”]//a[以(@href,“mailto:”)开头]

其结果是
a
元素节点列表(示例内容为单个节点)。
string()
函数将第一个节点强制转换为字符串。如果节点列表为空,它将返回一个空字符串


string(//span[@class=“output”]//a[以(@href,“mailto:”)开头)

您的代码应该可以工作,它的输出是什么(或错误消息)?它会打印出一系列错误:注意:在第224行的/Applications/MAMP/htdocs/webcrawler/index.php中尝试获取非对象的属性听起来像是您的
加载文件()
加载不正确。你能试着删除第二行和第三行吗(都以
$html
开头,并替换为
$html=file\u get\u html($target\u url);
?@laughProvider-尝试过你的方法,仍然会出现这些错误。好吧,出现这个问题的主要原因是
$html->find('span[class=output'))
正在返回
null
。您需要检查选择器是否正确。是否可以改用
span.output
$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"