【问题标题】:PHP Simple HTML DOM Parser finding specific textPHP Simple HTML DOM Parser 查找特定文本
【发布时间】:2013-04-04 22:19:51
【问题描述】:

试图从这种糟糕的 HTML 格式中获取数据

http://www.weather.gov.sg/lws/zoneInfo.do

我只需要获取 3 个地方的数据,例如勿洛、城市和加东。 为此,我如何将数据存储在数组中?

这就是我为获得商店前 5 行所做的,这并不是我想要的。

$row_counter='0';
while($row_counter<5)
{
$ret['Name'][] = $html->find('.FORM1', $row_counter)->innertext;
$ret['Area'][] = $html->find('.FORM1', $row_counter)->next_sibling()->innertext;
$ret['Alert'][] = $html->find('.FORM1', $row_counter)->next_sibling()->next_sibling()->innertext;
$ret['From'][] = $html->find('.FORM1', $row_counter)->next_sibling()->next_sibling()->next_sibling()->innertext;
$ret['Till'][] = $html->find('.FORM1', $row_counter)->next_sibling()->next_sibling()->next_sibling()->next_sibling()->innertext;
$row_counter++;
}

我能够成功地为整行和所有列存储数据。 搜索某个名称的最有效方法是什么,例如Bedok 并像 next_sibling 一样获取它旁边的列?

谢谢。

【问题讨论】:

  • 您期待什么数据?
  • 我需要有效的 from 和有效的 until 数据。由于没有雷击风险,现在它只是一个破折号,但它通常会显示一个时间
  • 我没有正确理解你。也许我英语不好。您是否要获取数组中的所有数据?
  • 我想要提到的特定区域右侧的数据,例如 Bedok、Zone、-、- 在一个数组中。

标签: php simple-html-dom


【解决方案1】:

这不容易。先试一试再问。 (:

<?php
include 'simple_html_dom.php';
$html = file_get_html('http://www.weather.gov.sg/lws/zoneInfo.do');

$n = 0;
$table = $html->find('table',3)->find('table',0)->find('table',0)->find('table',0)->find('table',3)->find('table',0);

$i = -3;
$rows = $table->find('tr');
$holder = array();

foreach($rows as $element){
    $i++;
    if($i < 0) continue;

    $holder[$i]['name'] = $element->find('td',0)->plaintext;
    $holder[$i]['zone_or_school'] = $element->find('td',1)->plaintext;
    $holder[$i]['risk'] = $element->find('td',2)->plaintext;
    $holder[$i]['from'] = $element->find('td',3)->plaintext;
    $holder[$i]['till'] = $element->find('td',4)->plaintext;
}

var_dump($holder);
?>

如果您想获取特定数据,则可以将其过滤掉:

foreach($holder as $key => $val)
{
if($holder[$key]['name']=='Bedoc')
$my_data = $holder[$key];
}

此代码未调试,因为我现在在移动设备上。但也许你已经明白了,如果不工作的话。谢谢

【讨论】:

  • 感谢您的热心意见。我没想到你会为我写完整件事。但是,我实际上想探索使用一种方法来查找“Bedok”而不是计算它所在的行的可能性。那里有 400 多行。
  • @user2216416:编辑了我的答案。尝试这个。让我知道它是否可以。
  • 哇,太棒了!非常感谢!它比我的代码高效得多。无需等待 2 分钟即可显示所有内容。哇!
猜你喜欢
  • 1970-01-01
  • 2016-04-21
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
相关资源
最近更新 更多