Запись HTML-тегов в словарь с отношениями - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь удалить html-файл, и я довольно успешно разбираю нужный мне тег и текст, однако я застрял в том, что касается сохранения проанализированных данных в списке или в тексте.Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу удалять связь между тегом.

    <div class="Content-divs">
     <h3>
      RCTM
     </h3>
     <table class="content-table">
      <tbody>
       <tr>
        <td>
         <div class="toggle-header">
          <h4 class="pull-left">
           <a href="########" target="_blank">
            Balanced Scorecard
           </a>
          </h4>
          <p class="pull-right">
           <a href="#######">
            Report Profile
           </a>
          </p>
          <div class="clearfix">
          </div>
         </div>
         <div class="toggle-content">
          <p>
           <strong>
            Description:
           </strong>
           Provides an indicator of performance.
          </p>
          Owner:
         </div>
        </td>
       </tr>
       <tr>
        <td class="even">
         <div class="toggle-header">
          <h4 class="pull-left">
           <a href="#######">
            Centralized Monitoring Metrics Dashboard (CMMD)
           </a>
          </h4>
          <p class="pull-right">
           <a href="###########">
            Report Profile
           </a>
          </p>
          <div class="clearfix">
          </div>
         </div>
         <div class="toggle-content">
          <p>
           <strong>
            Description:
           </strong>
           The metrics in this dashboard are intended to provide
          </p>
         </div>
        </td>
       </tr>
      </tbody>
     </table>
    </div>

Если вы видите в приведенном выше HTML-коде, тег является родительским тегом, под которым существует кратное число.Я заинтересован в том, чтобы включить это в список или список, сохраняя при этом его связь.

from bs4 import BeautifulSoup as soup
import re
import sqlite3

c = 'Functions.html'
so = soup(open(c),'html.parser')
s1 = so.find_all('div', attrs={'class':'Content-divs'})
print(s1[0].prettify())
z = dict()
for a in s1:
    k = a.find_all('h3', string=True)
    k=str(k)
    k = re.findall('>(.*)<', k)
    v = a.find_all('h4', attrs={'class':'pull-left'})
    print(k)
    for b in v:
        b = b.find_all('a')
        b = str(b)
        c = re.findall('>(.*)<', b)
        print(c)

Мой ожидаемый результат будет примерно таким: {'RCTM': 'Balance Scorecard', 'RCTM:' Centralized Monitoring MetricsПанель инструментов (CMMD) '}

1 Ответ

0 голосов
/ 28 ноября 2018

кажется, что вы пытаетесь захватить текст с помощью регулярных выражений, но он не совпадает, потому что в строке есть символ новой строки и re отсутствует флаг re.S.

Но я думаю, что вам нужно извлечь текст .text

for a in s1:
    k = a.find('h3').text
    print(k.strip())
    v = a.find_all('h4', attrs={'class':'pull-left'})
    for b in v:
        b = b.find('a').text
        print(b.strip())

или упрощенный

z = []
for a in s1:
    k = a.find('h3').text
    for b in a.select('h4.pull-left a'):
        z.append({k.strip() : b.text.strip()})
print(z)

результаты

[
  {'RCTM': 'Balanced Scorecard'},
  {'RCTM': 'Centralized Monitoring Metrics Dashboard (CMMD)'}
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...