Beautifulsoup反复获取sometext或url

时间:2018-11-30 02:10:48

标签: python beautifulsoup

我想创建一个包含键值对的列表。以<thead>项目为键。对于这些值,我想获取除<th>项之外的所有<th>个项的文本,其中有一个<a href='url'>,然后我想获取该URL。

目前,我只能从所有项目中获取文本。但是,如何获取'/ someurl'而不是Makulerad和Detaljer?

<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 :(得分:2)

尝试一下:

如果没有<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'}]