我正在尝试解析一个网站(files.minecraftforge.net)并获取下载链接以及每个链接的版本和构建时间等信息。我正在使用Simple HTML DOM Parser,到目前为止它一直很好用,但是我一直在修改文档而无法完全理解它。
每个表行有5个TD。我需要从前4个(促销,版本,我的世界,时间)以及我已经从URL收集的数据中获取数据。以下代码用于获取URL和标题(innertext),但我如何也获取该行的td信息?
我认为最好的方法是使用foreach()来抓取行,然后在TR内部为每个td做一个foreach。遗憾的是,我无法弄清楚如何在html-> find();
返回的内容上运行foreachforeach($html->find('table#promotions_table a') as $e)
{
echo $e->innertext . '<br>';
echo $e->href . '<br>';
}
我尝试解析的HTML片段显示为......
<table border="0" id="promotions_table">
<tr>
<th>Promotion</th>
<th>Version</th>
<th>Minecraft</th>
<th>Time</th>
<th>Downloads</th>
</tr>
<tr>
<td>1.6.4-Latest</td>
<td>9.11.1.965</td>
<td>1.6.4</td>
<td>11/21/2013 02:31:00 PM</td>
<td>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-changelog.txt">Changelog</a>)
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-installer.jar">Installer</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-installer.jar">*</a>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-javadoc.zip">Javadoc</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-javadoc.zip">*</a>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-src.zip">Src</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-src.zip">*</a>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-universal.jar">Universal</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-universal.jar">*</a>
</td>
</tr>
<tr>
<td>1.6.4-Recommended</td>
<td>9.11.1.965</td>
<td>1.6.4</td>
<td>11/21/2013 02:31:00 PM</td>
<td>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-changelog.txt">Changelog</a>)
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-installer.jar">Installer</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-installer.jar">*</a>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-javadoc.zip">Javadoc</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-javadoc.zip">*</a>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-src.zip">Src</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-src.zip">*</a>
(<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-universal.jar">Universal</a>)
<a href="http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.6.4-9.11.1.965/forge-1.6.4-9.11.1.965-universal.jar">*</a>
</td>
</tr>
答案 0 :(得分:0)
通过进一步的实验,我想出了如何做到这一点。如果其他人遇到同样的问题,我就是这样做的。
foreach($html->find('table#promotions_table tr') as $tr)
{
$details = array();
$count = 0;
foreach ($tr->find('td') as $td)
{
switch ($count)
{
case 0:
{
$details['title'] = $td->innertext;
echo "TITLE: " . $details['title'] . "</br>";
break;
}
case 1:
{
$details['build'] = $td->innertext;
echo "BUILD: " . $details['build'] . "</br>";
break;
}
case 2:
{
$details['version'] = $td->innertext;
echo "VERSION: " . $details['version'] . "</br>";
break;
}
case 3:
{
$details['time'] = $td->innertext;
echo "TIME: " . $details['time'] . "</br>";
break;
}
case 4:
{
foreach ($td->find('a') as $a)
{
if ($a->innertext == "Installer")
{
$url = $a->href;
// Strip the "adf.ly" URL from the beginning of the text
preg_match("#https?://(www\.)?adf\.ly/\d+/(.*)#i", $url, $matches);
echo "URL: " . $matches[2] . "</br>";
$details['url'] = $a->href;
}
}
}
}
$count++;
}
}