【发布时间】:2014-08-04 00:18:14
【问题描述】:
我正在尝试学习 Simple HTML Dom Parser,作为介绍,我正在尝试解析 ESPN's college football score webpage 并将其转换为纯 HTML 表格。到目前为止,我已经能够做所有事情,除了导入日期。我遇到的问题是数据的结构如下:
<div class=gameDay-Container>
<h4 class="games-date">Thursday, August 28 2014</h4>
<div class=mod-ncf-scorebox> Containing games that I have scraped, which I want to add the date (Aug 28) to </div>
<h4 class="games-date">Friday, August 29 2014</h4>
<div class=mod-ncf-scorebox> containing the next games that I will scrape, which I want the date (Aug 29) appended to </div>
</div>
顶部会抓取每个日期内的游戏数量并将其放入数组中,然后底部会编译表格的数据。 (这很混乱,因为我是通过反复试验来编写的;有没有更简单的方法来做到这一点?)
foreach($html_base->find('.gameDay-Container') as $dates) {
$rows = $dates->find('.mod-ncf-scorebox');
$count = count($rows);
$supercount=$count.',';
$megacount=explode(', ',$supercount);
print_r($megacount);
}
foreach($html_base->find('.mod-ncf-scorebox') as $event) {
$item['Date'] = '';
$item['Away Team'] = $event->find('.team-name', 0)->plaintext;
$item['Away Team'] = substr($item['Away Team'], 0, -1);
$item['Away Score'] = $event->find('li.finalScore', 1);
$item['Home Team'] = $event->find('.team-name', 1)->plaintext;
$item['Home Team'] = substr($item['Home Team'], 0, -1);
$item['Home Score'] = $event->find('li.finalScore', 2)->plaintext;
$item['Game Status'] = $event->find('div.game-status', 0)->plaintext;
$item['Game ID'] = $event->find('p', 0)->id;
$item['Game ID'] = substr($item['Game ID'], 0, strpos( $item['Game ID'], '-'));
$item['Week'] = $week;
$item['League'] = 'NCAA Football';
$NCAAFscores[] = $item;
}
问题:我可以将游戏日期添加到表格中的每一行吗?如果我必须使用数组设置,我可以从中获取值并进行某种计数吗?有没有更简单的方法让我完全忽略?
答案:
根据下面 Enissay 的建议,我嵌套了 foreach 语句,效果非常好。这是最终的 sn-p 代码,以防万一有人有类似的事情。
foreach($html_base->find('.gameDay-Container') as $event2) {
$date1 = $event2->prev_sibling()->plaintext;
$date2 = new DateTime($date1);
$ymd = ($date2->format('Y-m-d'));
foreach($event2->find('.mod-ncf-scorebox') as $event) {
$item['Date'] = $ymd;
$item['Away Team'] = $event->find('.team-name', 0)->plaintext;
$item['Away Team'] = substr($item['Away Team'], 0, -1);
$item['Away Score'] = $event->find('li.finalScore', 1);
$item['Home Team'] = $event->find('.team-name', 1)->plaintext;
$item['Home Team'] = substr($item['Home Team'], 0, -1);
$item['Home Score'] = $event->find('li.finalScore', 2)->plaintext;
$item['Game Status'] = $event->find('div.game-status', 0)->plaintext;
$item['Game ID'] = $event->find('p', 0)->id;
$item['Game ID'] = substr($item['Game ID'], 0, strpos( $item['Game ID'], '-'));
$item['Week'] = $week;
$item['League'] = 'NCAA Football';
$NCAAFscores[] = $item;
}
}
【问题讨论】:
-
我会说你可以使用
strtotime(),比如strtotime($event->find('.games-date', 0)->plaintext)?
标签: php mysql arrays simple-html-dom