Beautifulsoup повторяется, чтобы получить либо <td>sometext </td>, либо URL - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу создать список, который содержит пару ключ-значение.С ключами <thead>.Для значений, которые я хочу получить для всех элементов <th>, кроме элементов <th>, в которых есть <a href='url'>, вместо этого я хочу получить URL.

В настоящее время я могу толькополучить текст от всех предметов.Но как мне получить '/ someurl' вместо Макулерада и Детальера?

<table class="table table-bordered table-hover table-striped zero-margin-top">
  <thead>
    <tr>
      <th>Volymsenhet</th>
      <th>Pris</th>
      <th>Valuta</th>
      <th>Handelsplats</th>
      <th>url1</th>
      <th>url2</th>
    </tr>
  </thead>
  <tbody>
      
     <tr  class="iprinactive">
        <td>Antal</td>
        <td>5,40</td>
        <td>SEK</td>
        <td>NASDAQ STOCKHOLM AB</td>
        <td><a href="/someurl">Makulerad</a></td>
        <td>
          <a href="/someurl">Detaljer</a>
        </td>
      </tr>
    
    </tbody>
  </table>

Мой код:

raw_html = simple_get('https://example.com/')
soup = BeautifulSoup(raw_html, 'html.parser')

table = soup.find("table", attrs={"class":"table"})
head = [th.get_text() for th in table.find("tr").find_all("th")]

datasets = []
for row in table.find_all("tr")[1:]:
    dataset = dict(zip(head,(td.get_text() for td in row.find_all("td"))))
    datasets.append(dataset)

1 Ответ

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

Попробуйте это:

просто получите текстовые данные <td>, если у него нет <a>.В противном случае получите значение href.

from bs4 import BeautifulSoup
raw_html = '''<table class="table table-bordered table-hover table-striped zero-margin-top">
  <thead>
    <tr>
      <th>Volymsenhet</th>
      <th>Pris</th>
      <th>Valuta</th>
      <th>Handelsplats</th>
      <th>url1</th>
      <th>url2</th>
    </tr>
  </thead>
  <tbody>          
     <tr class="iprinactive">
        <td>Antal</td>
        <td>5,40</td>
        <td>SEK</td>
        <td>NASDAQ STOCKHOLM AB</td>
        <td><a href="/someurl">Makulerad</a></td>
        <td>
          <a href="/someurl">Detaljer</a>
        </td>
      </tr>

    </tbody>
  </table>'''
soup = BeautifulSoup(raw_html, 'html.parser')

table = soup.find("table", attrs={"class":"table"})
head = [th.get_text() for th in table.find("tr").find_all("th")]

datasets = []
for row in table.find_all("tr")[1:]:
    dataset = dict(zip(head, [td.get_text() if not td.a else td.a['href'] for td in row.find_all("td")]))
    datasets.append(dataset)
print(datasets)

ВЫХОД:

[{'Volymsenhet': 'Antal', 'Pris': '5,40', 'Valuta': 'SEK', 'Handelsplats': 'NASDAQ STOCKHOLM AB', 'url1': '/someurl', 'url2': '/someurl'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...