Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析链接和信息的嵌套HTML_Javascript_Php_Html_Parsing_Simple Html Dom - Fatal编程技术网

Javascript 解析链接和信息的嵌套HTML

Javascript 解析链接和信息的嵌套HTML,javascript,php,html,parsing,simple-html-dom,Javascript,Php,Html,Parsing,Simple Html Dom,我正在尝试解析一个网站files.minecraftforge.net,并获取下载链接以及每个链接的版本和构建时间等信息。我使用的是简单的HTMLDOM解析器,到目前为止,它工作得非常好,但是我一直在修改文档,不能完全理解它 每个表行有5个TDs。我需要从前4个推广,版本,Minecraft,时间以及我已经从URL收集的数据抓取数据。下面的代码可以抓取URL和标题innertext,但是如何也抓取该行的td信息呢 我认为最好的方法是使用foreach获取行,然后对TR中的每个td在其中执行for

我正在尝试解析一个网站files.minecraftforge.net,并获取下载链接以及每个链接的版本和构建时间等信息。我使用的是简单的HTMLDOM解析器,到目前为止,它工作得非常好,但是我一直在修改文档,不能完全理解它

每个表行有5个TDs。我需要从前4个推广,版本,Minecraft,时间以及我已经从URL收集的数据抓取数据。下面的代码可以抓取URL和标题innertext,但是如何也抓取该行的td信息呢

我认为最好的方法是使用foreach获取行,然后对TR中的每个td在其中执行foreach。不幸的是,我不知道如何在html->find返回的内容上运行foreach

foreach($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>

我通过进一步的实验找到了如何做到这一点。下面是我如何做到的,以防其他人遇到同样的问题

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++;
    }
}

我打算提出大致相同的建议。您可以稍微简化一下,而不是切换,您可以执行$details['title']=$tr->find'td',1->innerText;其中1是相关td的第n个子索引。但是,不错的解决方案是: