【问题标题】:how to make a database from a html file?如何从 html 文件创建数据库?
【发布时间】:2017-01-11 22:45:37
【问题描述】:

我有一个 HTML 文件,其中包含许多 <tr> 标签,例如

       <tr>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                aaa
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                bbb                                
            </td>
             <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                ccc
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                ddd  
            </td>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                eee
            </td>
        </tr>
        <tr>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                xxx
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                vvv                                
            </td>
             <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                bbb
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                nnn  
            </td>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
                hhh
            </td>
        </tr>

我想根据这些值创建一个数据库(aaa、bbb、ccc.....)。
如何分隔这些标签并选择正确的值?
我想使用 php 进行此选择。

【问题讨论】:

  • 您可以解析 HTML,然后根据您解析的值生成查询。
  • 在浏览器的控制台中运行一些 JavaScript 来一次遍历表格一行并抓取其中的单元格。将结果放入一个数组并 console.log 该数组。复制数组,然后在后端运行它,您可以将它插入到数据库中。
  • *.com/questions/1403087/… 这允许您转换为 CSV,然后很容易导入到数据库或编写 php 文件来访问 CSV
  • 我尝试将 libreoffice calc 转换为 CSV,但在我的情况下它不起作用。关于 JS,我可以比编写 js 代码更快地复制和粘贴项目,然后将值一一复制。 @user1336827:如何解析html?
  • @PatrickMurphy:起初我用 libreoffice calc 测试了页面的来源,但它没有响应!但使用纯 html 文件可以分离数据。谢谢。但是我喜欢通过使用一些正则表达式或..来解决问题!

标签: php html


【解决方案1】:

如果文件是正确的 XML,您可以使用 XPath 遍历元素。

$content = <<<EOT
<html>
    <tr>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    aaa
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    bbb
            </td>
             <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    ccc
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    ddd
            </td>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    eee
            </td>
        </tr>
        <tr>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    xxx
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    vvv
            </td>
             <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    bbb
            </td>
            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    nnn
            </td>

            <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
    hhh
            </td>
        </tr>
</html>
EOT;
$xml = new SimpleXmlElement($content);
$result = $xml->xpath("//td");
$values = array();
foreach($result as $node) {
    $values[] = trim((string)$node);
}
var_dump($values);

提取数据后,您可以使用mysqli_connect 连接到数据库并使用mysqli_query 运行查询以将数据插入到表中。

【讨论】:

  • 不幸的是它不是 xml。如果它是某种 xml 解析器可以帮助我。我在我的问题中复制了 html 文件的源代码,它是一个普通的 html 页面。
  • @mrmrn,您在评论之前尝试过建议的代码吗?
  • 大多数 (X)HTML 文件可以解析为 XML。该代码与您的示例完美配合。
  • @RuslanAbuzant,正如我上面所说,我使用了*.com/questions/1403087/…,正如我在问题下方的评论中提到的那样。但老实说,我没有尝试过代码。我会测试你的代码。非常感谢兄弟。
  • hhhh @mrmrn,我什至不是指我的答案或我的代码。我指的是@Jeff 的代码,它也可以完美运行,因为他正确使用了$xml-&gt;xpath("//td");,然后你说我没有使用 XML,这立即表明你甚至没有尝试过他的代码。没关系,无论如何,祝你的项目好运。
【解决方案2】:

此代码假定您问题中的 HTML 正是您要从中提取数据的 HTML,因此我使用行缩进和换行符来提取数据,如下所示:

    $content = <<<EOT
    <html>
        <tr>

                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        aaa
                </td>
                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        bbb
                </td>
                 <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        ccc
                </td>
                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        ddd
                </td>

                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        eee
                </td>
            </tr>
            <tr>

                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        xxx
                </td>
                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        vvv
                </td>
                 <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        bbb
                </td>
                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        nnn
                </td>

                <td class="parsehlisttable_alteritemstyle" style="text-align: right;">
        hhh
                </td>
            </tr>
    </html>
    EOT;


$lines = explode("\n", $content);
foreach($lines as $line)
{
  if( trim($line) == trim(strip_tags($line)) && $line != '' )
  {
     $line = trim($line);
     $mydata[] = $line;
  }
}

foreach($mydata as $data)
{
   mysql_query("INSERT INTO .... VALUES (NULL, '" . $data . "' ) ");
}

祝你好运

【讨论】:

    【解决方案3】:

    首先,我将html页面转换为xls文件,然后使用libreoffice calc将其转换为CSV文件。

    然后我将 CSV 加载到 mysql 表中。但是这张桌子没有我需要的那么好。所以我使用了一些 php 代码并读取数据库并将其重新写入新表。 现在我从 HTML 文件中获得了一个干净且有用的数据库。

    【讨论】:

    • 如果您将此答案标记为已接受的答案,您至少应该分享您的 php 代码。我看不出有人如何真正验证您的回答是否正确或错误……