【问题标题】:Get some data from a htm page and save in mysql从 htm 页面获取一些数据并保存在 mysql 中
【发布时间】:2022-02-16 20:28:07
【问题描述】:

我不是程序员 :(

我想要一个从另一个 x.htm 页面插入地址并单击“获取”的页面

然后我想把数据保存在一个mysql数据库中,这样我就可以为每个驱动程序取出数据了。

<table align="center">
  <tbody>
    <center><b><p>Statistik: 07-02-2022 21:55:35 -  </p></b></center><br />
    <tr bgColor="#999999">
      <td bgcolor="#999999" width="30">
        <div align="center">
          <font face="Verdana">Pos </font>
        </div>
      </td>
      <td bgcolor="#999999" width="158">
        <div align="center">
          <font face="Verdana">driver </font>
        </div>
      </td>
      <td bgcolor="#999999" width="100">
        <div align="center">
          <font face="Verdana">Car </font>
        </div>
      </td>
      <td bgcolor="#e5665e" width="70">
        <div align="center">
          <font face="Verdana"> 1-Red</font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="70">
        <div align="center">
          <font face="Verdana"> 2-White</font>
        </div>
      </td>
      <td bgcolor="#78ccea" width="70">
        <div align="center">
          <font face="Verdana"> 3-Blue</font>
        </div>
      </td>
      <td bgcolor="#ffff28" width="70">
        <div align="center">
          <font face="Verdana"> 4-Yellow</font>
        </div>
      </td>
      <td bgcolor="#999999" width="70">
        <div align="center">
          <font face="Verdana"><b>Best time</b></font>
        </div>
      </td>
      <td bgcolor="#999999" width="80">
        <div align="center">
          <font face="Verdana">Total laps</font>
        </div>
      </td>
    </tr>
    <tr bgColor="#999999">
      <td bgcolor="#ffffff" width="30">
        <div align="center">
          <font face="Verdana">1</font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="158">
        <div align="center">
          <font face="Verdana">James Hunt</font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="100">
        <div align="center">
          <font face="Verdana">Alfa Romeo GTA</font>
        </div>
      </td>
      <td bgcolor="#87fe58" width="70">
        <div align="center">
          <font face="Verdana"><b>7.952</b></font>
        </div>
      </td>
      <td bgcolor="#87fe58" width="70">
        <div align="center">
          <font face="Verdana"><b>7.963</b></font>
        </div>
      </td>
      <td bgcolor="#87fe58" width="70">
        <div align="center">
          <font face="Verdana"><b>7.975</b></font>
        </div>
      </td>
      <td bgcolor="#87fe58" width="70">
        <div align="center">
          <font face="Verdana"><b>8.088</b></font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="70">
        <div align="center">
          <font face="Verdana"><b>7.952</b></font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="80">
        <div align="center">
          <font face="Verdana"><b>88.25</b></font>
        </div>
      </td>
    </tr>
    <tr bgColor="#999999">
      <td bgcolor="#ffffff" width="30">
        <div align="center">
          <font face="Verdana">2</font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="158">
        <div align="center">
          <font face="Verdana">Jackie Stewart</font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="100">
        <div align="center">
          <font face="Verdana">Mini Cooper</font>
        </div>
      </td>
      <td bgcolor="#b6fea6" width="70">
        <div align="center">
          <font face="Verdana">8.176</font>
        </div>
      </td>
      <td bgcolor="#b6fea6" width="70">
        <div align="center">
          <font face="Verdana">8.194</font>
        </div>
      </td>
      <td bgcolor="#b6fea6" width="70">
        <div align="center">
          <font face="Verdana">7.989</font>
        </div>
      </td>
      <td bgcolor="#b6fea6" width="70">
        <div align="center">
          <font face="Verdana">8.197</font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="70">
        <div align="center">
          <font face="Verdana">7.989</font>
        </div>
      </td>
      <td bgcolor="#ffffff" width="80">
        <div align="center">
          <font face="Verdana">86.68</font>
        </div>
      </td>
    </tr>

【问题讨论】:

  • 这被称为网页抓取——你不能单独对网页进行此操作。您可以使用 wget 或 nodefetch 或使用 curl 的 php 编写 node.js 程序

标签: javascript html mysql html-table


【解决方案1】:

好吧,伙计,这非常简单:您可以使用QuerySelectorAll

根据您的代码查看此示例:

const rows = [];
document.querySelectorAll('table tbody tr').forEach((tr, rowIndex) => {
    const row = []; 
    tr.querySelectorAll('td').forEach((item, cellIndex) => {
      console.log(`row ${rowIndex}, cell ${cellIndex}:`, item.textContent.trim());
      row.push(item.textContent.trim());
    });
    rows.push(row);
});
console.log("rows", rows); // you can use this data to save on you database
<table>
   <tbody>
      <center>
         <b>
            <p>Statistik: 07-02-2022 21:55:35 -  </p>
         </b>
      </center>
      <br />
      <tr bgColor="#999999">
         <td bgcolor="#999999" width="30">
            <div align="center"> <font face="Verdana">Pos </font></div>
         </td>
         <td bgcolor="#999999" width="158">
            <div align="center"> <font face="Verdana">driver </font></div>
         </td>
         <td bgcolor="#999999" width="100">
            <div align="center"> <font face="Verdana">Car </font></div>
         </td>
         <td bgcolor="#e5665e" width="70">
            <div align="center"> <font face="Verdana"> 1-Red</font></div>
         </td>
         <td bgcolor="#ffffff" width="70">
            <div align="center"> <font face="Verdana"> 2-White</font></div>
         </td>
         <td bgcolor="#78ccea" width="70">
            <div align="center"> <font face="Verdana"> 3-Blue</font></div>
         </td>
         <td bgcolor="#ffff28" width="70">
            <div align="center"> <font face="Verdana"> 4-Yellow</font></div>
         </td>
         <td bgcolor="#999999" width="70">
            <div align="center"> <font face="Verdana"><b>Best time</b></font></div>
         </td>
         <td bgcolor="#999999" width="80">
            <div align="center"> <font face="Verdana">Total laps</font></div>
         </td>
      </tr>
      <tr bgColor="#999999">
         <td bgcolor="#ffffff" width="30">
            <div align="center"> <font face="Verdana">1</font></div>
         </td>
         <td bgcolor="#ffffff" width="158">
            <div align="center"> <font face="Verdana">James Hunt</font></div>
         </td>
         <td bgcolor="#ffffff" width="100">
            <div align="center"> <font face="Verdana">Alfa Romeo GTA</font></div>
         </td>
         <td bgcolor="#87fe58" width="70">
            <div align="center"> <font face="Verdana"><b>7.952</b></font></div>
         </td>
         <td bgcolor="#87fe58" width="70">
            <div align="center"> <font face="Verdana"><b>7.963</b></font></div>
         </td>
         <td bgcolor="#87fe58" width="70">
            <div align="center"> <font face="Verdana"><b>7.975</b></font></div>
         </td>
         <td bgcolor="#87fe58" width="70">
            <div align="center"> <font face="Verdana"><b>8.088</b></font></div>
         </td>
         <td bgcolor="#ffffff" width="70">
            <div align="center"> <font face="Verdana"><b>7.952</b></font></div>
         </td>
         <td bgcolor="#ffffff" width="80">
            <div align="center"> <font face="Verdana"><b>88.25</b></font></div>
         </td>
      </tr>
      <tr bgColor="#999999">
         <td bgcolor="#ffffff" width="30">
            <div align="center"> <font face="Verdana">2</font></div>
         </td>
         <td bgcolor="#ffffff" width="158">
            <div align="center"> <font face="Verdana">Jackie Stewart</font></div>
         </td>
         <td bgcolor="#ffffff" width="100">
            <div align="center"> <font face="Verdana">Mini Cooper</font></div>
         </td>
         <td bgcolor="#b6fea6" width="70">
            <div align="center"> <font face="Verdana">8.176</font></div>
         </td>
         <td bgcolor="#b6fea6" width="70">
            <div align="center"> <font face="Verdana">8.194</font></div>
         </td>
         <td bgcolor="#b6fea6" width="70">
            <div align="center"> <font face="Verdana">7.989</font></div>
         </td>
         <td bgcolor="#b6fea6" width="70">
            <div align="center"> <font face="Verdana">8.197</font></div>
         </td>
         <td bgcolor="#ffffff" width="70">
            <div align="center"> <font face="Verdana">7.989</font></div>
         </td>
         <td bgcolor="#ffffff" width="80">
            <div align="center"> <font face="Verdana">86.68</font></div>
         </td>
      </tr>
   </tbody>
</table>

PS: 如果你使用 NodeJS(serverside) 也许你可以得到 HTML 代码 首先然后使用像jsdom这样的dom阅读器来解析HTML并使用 类似之前的解决方案。

PS 2:你可以使用axios来处理http/s请求

const html = (await axios.get("https://example.com/page.html")).data;
const dom = new JSDOM(html);
const trs = dom.querySelectorAll('table tbody tr');

【讨论】:

  • 谢谢,这听起来很简单,但我完全是空白,我需要一个网站,我可以在其中输入结果网站的名称/地址,按确定底部,检查添加时提供的数据,然后按底部保存在数据库中。事实上,我需要手动向每个结果站点添加一个额外的数据,一个曲目名称
  • 这个想法是帮助你找到解决方案,而不是给你一个完整的源代码或类似的东西......如果你想完成你的项目,首先,你需要阅读更多关于概念的内容例如表单、数据库、REST 服务、后端和前端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多