python - 如何使用python从HTML文件中读取数据并将数据写入CSV文件?

标签 python html pandas csv beautifulsoup

我有一个 .html 文件报告,其中包含表格和通过-失败标准方面的数据。所以我希望使用 Python3 将这些数据写入 .csv 文件。 请建议我如何进行? 例如,数据将是这样的:

<h2>Sequence Evaluation of Entire Project &nbsp;&nbsp;&nbsp;<em class="contentlink"><a href="#contents">[Contents]</a></em> </h2>

<table width="100%" class="coverage">
  <tr class="nohover">
    <td colspan="8" class="tableabove">Test Sequence State</td>
  </tr>
  <tr>
    <th colspan="2" style="white-space:nowrap;">Metric</th>
    <th colspan="2">Percentage</th>
    <th>Target</th>
    <th>Total</th>
    <th>Reached</th>
    <th>Unreached</th>
  </tr>
  <tr>
    <td colspan="2">Test Sequence Work Progress</td>
    <td>100.0%</td>
    <td>
      <table class="metricbar">
        <tr class="borderX">
          <td class="white"></td>
          <td class="target"></td>
          <td class="white" colspan="2"></td>
        </tr>
        <tr>
          <td class="covreached" width="99%"></td>
          <td class="target" width="1%"></td>
          <td class="covreached" width="0%"></td>
          <td class="covnotreached" width="0%"></td>
        </tr>
        <tr class="borderX">
          <td class="white"></td>
          <td class="target"></td>
          <td class="white" colspan="2"></td>
        </tr>
      </table>
    </td>
    <td>100%</td>
    <td>24</td>
    <td>-</td>
    <td>-</td>
  </tr>
  <tr>

最佳答案

假设您知道 header 并且实际上只需要关联的百分比,对于 bs4 4.7.1,您可以使用 :contains 来定位 header ,然后获取下一个 td。您会将 HTML 从文件读取到显示的 html 变量中。

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

html = '''
<h2>Sequence Evaluation of Entire Project &nbsp;&nbsp;&nbsp;<em class="contentlink"><a href="#contents">[Contents]</a></em> </h2>

<table width="100%" class="coverage">
  <tr class="nohover">
    <td colspan="8" class="tableabove">Test Sequence State</td>
  </tr>
  <tr>
    <th colspan="2" style="white-space:nowrap;">Metric</th>
    <th colspan="2">Percentage</th>
    <th>Target</th>
    <th>Total</th>
    <th>Reached</th>
    <th>Unreached</th>
  </tr>
  <tr>
    <td colspan="2">Test Sequence Work Progress</td>
    <td>100.0%</td>
    <td>
      <table class="metricbar">
        <tr class="borderX">
          <td class="white"></td>
          <td class="target"></td>
          <td class="white" colspan="2"></td>
        </tr>
        <tr>
          <td class="covreached" width="99%"></td>
          <td class="target" width="1%"></td>
          <td class="covreached" width="0%"></td>
          <td class="covnotreached" width="0%"></td>
        </tr>
        <tr class="borderX">
          <td class="white"></td>
          <td class="target"></td>
          <td class="white" colspan="2"></td>
        </tr>
      </table>
    </td>
    <td>100%</td>
    <td>24</td>
    <td>-</td>
    <td>-</td>
  </tr>
  <tr>
  '''
soup = bs(html, 'lxml') # 'html.parser' if lxml not installed
header = 'Test Sequence Work Progress'
result = soup.select_one('td:contains("' + header + '") + td').text
df = pd.DataFrame([result], columns = [header])
print(df)
df.to_csv(r'C:\Users\User\Desktop\data.csv', sep=',', encoding='utf-8-sig',index = False )

关于python - 如何使用python从HTML文件中读取数据并将数据写入CSV文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56110685/

相关文章:

python - (Un)多组复选按钮的全选复选按钮功能

python - 将 Pandas 数据框转换为以第一列为键的字典

python - PyCairo Pip 在 Windows 10 上的 python 3.8 中安装失败

javascript - "Scroll Down"JavaScript 函数没有滚动到正确的位置

javascript - 如何在双击时附加和删除div

python - 数据帧转换 |更好的方法?

python - 如何高效快速地从字符串元素数组中找出有效组合用于员工排类?

javascript - 在处理 "div"事件时无法移动 "onclick"

python - 如何使用 x 轴为 "Date"的 seaborn 实现 Lineplot

python - 如何在 Python DataFrame 中的确定行之前添加空行?