具有多个表的PHP简单HTML DOM解析器

时间:2018-01-21 23:51:39

标签: php html json parsing html-parsing

我正在尝试解析当地天气频道网站的html数据,以获取我所在地区周围的学校,企业和教堂的信息。

我遇到了这个问题但是信息包含在没有id的表中,我可以使用它来识别它们。 下面我列举了一个他们的html表格的示例。是否可以解析这样的多个HTML表,并使用HTML DOM Parser和PHP提取包含的数据。我已阅读 this 文档,但似乎无法找到适用的解决方案。

谢谢!

编辑:我可能还应该指定我想要获取此数据并能够将其解析为JSON数据以用于加载应用程序。所以基本上有组织名称,然后是我可以从JSON页面获取的状态。

Link to weather channels site

<table class="table table-condensed table-striped">
  <tbody>
    <tr>
      <th class="span5">Organization</th>
      <th class="span9">Status</th>
    </tr>
    <tr>
      <td><b>BEACON HOPE CHURCH - GRAND ISLAND</b></td>
      <td>Activity Canceled Sunday<small>: No Evening Classes</small></td>
    </tr>
    <tr>
      <td><b>PRINCE OF PEACE CATHOLIC (KEARNEY)</b></td>
      <td>Closed Monday<small>: SUNDAY EVENING ACTIVITIES CANCELED, NO MON. MORNING MASS, OFFICES CLOSED MON.</small></td>
    </tr>
  </tbody>
</table>

1 个答案:

答案 0 :(得分:0)

在上面评论过的用户短信的帮助下找到了我的问题的答案。这个php从第一个表中提取数据并以JSON格式对其进行编码。

<?php

include('simple_html_dom.php');
header('Content-Type: application/json');

$html = file_get_html('http://www.1011now.com/weather/closings');
$row_count=0;
$json = array();

// Find all links 
$table = $html->find('table', 0);
foreach($table->find('tr') as $row) {
    $name = $row->find('td',0)->innertext;
    $status = $row->find('td',1)->innertext;

    $json[] = [ 'name' => strip_tags($name), 'status' => strip_tags($status)];
}

$options = array(
    'http' => array(
    'method'  => 'POST',
    'content' => json_encode(array('Closings' =>$json)),
    'header'=>  "Content-Type: application/json\r\n" .
                "Accept: application/json\r\n"
    )
);

$context  = stream_context_create( $options );
$result = file_get_contents( $url, false, $context );
$response = json_decode( $result );

echo json_encode(array('Closings' =>$json), JSON_PRETTY_PRINT);  


?>