簡體   English   中英

解析嵌套的HTML以獲取鏈接和信息

[英]Parse nested HTML for Links and Info

我正在嘗試解析一個網站(files.minecraftforge.net)並獲取下載鏈接以及每個版本的信息,例如版本和構建時間。 我正在使用簡單HTML DOM解析器,到目前為止,它的運行狀況很好,但是我一直在修改文檔,無法完全理解它。

每個表行都有5個TD。 我需要從前4個(促銷,版本,Minecraft,時間)中獲取數據,以及已經從URL中收集的數據。 以下代碼可用於獲取URL和標題(內文),但是我又如何也獲取該行的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++;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM