我使用Simple HTML DOM从返回结果页面的网页获取数据。我想将其格式化为标题,然后描述。现在我正在使用这段代码:
<?php
include('simple_html_dom.php');
$html = file_get_html('https://www.example.com?q=randomquery');
foreach($html->find('div#resultscontainer') as $data)
//for each title
foreach($data->find('h3') as $title) {
//for each description
foreach($data->find('span.st') as $desc) {
//format code
echo "<div class='result'>";
echo $title;
echo $desc;
echo "</div>";
}
}
?>
现在代码给了我一堆标题,以及这些标题下的所有可能的描述。截图:
我希望将每个标题分配给一个正确的描述。如果这看起来很简单,我很抱歉,但我是初学者。欢迎大家帮忙,谢谢。
- 卡梅隆
答案 0 :(得分:0)
您的第二个foreach检查完整的HTML文件,而不是$ title下面的内容。
你应该这样做:
<?php
//for each title
foreach($data->find('h3') as $title) {
//for each description
foreach($title->parent->find('span.st') as $desc) {
//format code
echo "<div class='result'>";
echo $title->plaintext;
echo $desc->plaintext;
echo "</div>";
}
}
有关详情,请参阅http://simplehtmldom.sourceforge.net/
上的示例- 编辑:因为你给我们一个截图而不是你试图解析的html(大笑......!)我只能猜测html是怎么样的......我编辑了我的答案来查询h3s的兄弟姐妹。
答案 1 :(得分:0)
试试这样:
foreach($html->find('div#resultscontainer') as $data) {
$titlesAndDescriptions = array();
// for each title
foreach($data->find('h3') as $key => $title) {
$titlesAndDescriptions[$key] = array('title' => $title);
}
// for each description
foreach($data->find('span.st') as $key => $desc) {
$titlesAndDescriptions[$key]['description'] = $desc;
}
foreach ($titlesAndDescriptions as $titleAndDescription) {
echo "<div class='result'>";
echo $titleAndDescription['title'];
echo $titleAndDescription['description'];
echo "</div>";
}
}