本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何获取xpath后的字符串

发布于2024-11-30 03:35     阅读(600)     评论(0)     点赞(1)     收藏(2)


我有这个 html 页面:

<div class="table_container p402_hide " id="div_Summer">
<table class=" stats_table" id="Summer">
<colgroup><col><col><col><col><col><col><col><col><col></colgroup>
<thead>
<tr class="">
  <th data-stat="year" align="right"  class=" sort_default_asc" >Year</th>
  <th data-stat="city" align="left"  class=" sort_default_asc" >City</th>
  <th data-stat="country" align="left"  class=" sort_default_asc" >Country</th>
  <th data-stat="countries" align="right"  class="" >Countries</th>
  <th data-stat="participants" align="right"  class="" >Participants</th>
  <th data-stat="participants_men" align="right"  class="" >Men</th>
  <th data-stat="participants_women" align="right"  class="" >Women</th>
  <th data-stat="sports" align="right"  class="" >Sports</th>
  <th data-stat="events" align="right"  class="" >Events</th>
</tr>
</thead>
<tbody>
<tr  class="">
   <td align="right" ><a href="/olympics/summer/2012/">2012</a></td>
   <td align="left"  csk="London:2012">London</td>
   <td align="left"  csk="Great Britain:2012">Great Britain</td>
   <td align="right" >205</td>
   <td align="right" >10,519</td>
   <td align="right" >5,864</td>
   <td align="right" >4,655</td>
   <td align="right" >32</td>
   <td align="right" >302</td>
</tr>

为了提取文本,我使用了用 PHP 7 编写的代码:

<?php

$html = file_get_contents('http://www.sports-reference.com/olympics/summer/');

error_reporting(E_ERROR | E_PARSE);

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

$xpath = new DOMXpath($doc);
$result = $xpath->query('//div[@id="div_Summer"]');


var_dump($result->item(0)->nodeValue);

?>

通过这种方式我得到了这个结果:

string(2148) "
Year
  City
  Country
  Countries
  Participants
  Men
  Women
  Sports
  Events
2012
   London
   Great Britain
   205
   10,519
   5,864
   4,655
   32
   302

"

我只想要这个文本:“2012”和“伦敦”。我该如何从 $result 中提取这些信息?


解决方案


您是否尝试过td(s)直接查询您感兴趣的内容?尝试使用更具体的 xpath 表达式,如下所示:

$result = $xpath->query('(//div[@id="div_Summer"]//tbody//tr//td[position() >= 1 and position() <= 2])');

然后通过一个简单的循环处理它们:

<?php
foreach ($result as $element) {
    var_dump($element->nodeValue);
}
?>

完整示例,基于您的代码:

<?php

$html = file_get_contents('http://www.sports-reference.com/olympics/summer/');

error_reporting(E_ERROR | E_PARSE);

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

$xpath = new DOMXpath($doc);
$result = $xpath->query('(//div[@id="div_Summer"]//tbody//tr//td[position() >= 1 and position() <= 2])');

foreach ($result as $element) {
    var_dump($element->nodeValue);
}

?>

输出(截断):

string(4) "2012"
string(6) "London"
string(4) "2008"
string(7) "Beijing"
string(4) "2004"
[..]


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.phpheidong.com/blog/article/556018/1bef74e7ad112afb234e/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)