Как прочитать данные из файла HTML и записать данные в файл CSV, используя python? - PullRequest
2 голосов
/ 13 мая 2019

У меня есть файл отчета .html, который состоит из данных в виде таблиц и критериев прохождения. поэтому я хочу, чтобы эти данные были записаны в файл .csv с использованием Python3. Пожалуйста, предложите мне, как поступить? Например, данные будут такими:

<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>

Ответы [ 2 ]

0 голосов
/ 13 мая 2019
import csv 
from bs4 import BeautifulSoup

out = open('out.csv', 'w', encoding='utf-8')
path="my.html"  #add the path of your local file here


soup = BeautifulSoup(open(path), 'html.parser')
for link in soup.find_all('p'): #add tag whichyou want to extract
 a=link.get_text()
 out.write(a)
out.write('\n')
out.close()  
0 голосов
/ 13 мая 2019

Предполагая, что вы знаете заголовок и действительно нуждаетесь только в соответствующем проценте, с bs4 4.7.1 вы можете использовать: содержимое для целевого заголовка, а затем взять следующий 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 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...