【问题标题】:Python: extract certain values by using bs4Python:使用 bs4 提取某些值
【发布时间】:2019-01-06 05:37:03
【问题描述】:

HTML:

<div class="col-7"> 
    <dl class="row box">
        <h2>GENERAL</h2>
        <dt class="col-6">transmission:</dt>
        <dd class="col-6">sequential automatic</dd>
        <dt class="col-6 grey">number of seats:</dt>
        <dd class="col-6">5</dd>
        <dt class="col-6">first year of production:</dt>
        <dd class="col-6">2017</dd>
        <dt class="col-6 grey">last year of production:</dt>
        <dd class="col-6">available</dd>
    </dl>
        <dl class="row box">
        <h2>DRIVE</h2>
        <dt class="col-6">fuel:</dt>
        <dd class="col-6">petrol</dd>
        <dt class="col-6 grey">total maximum power:</dt>
        <dd class="col-6">147 kW (200 hp)</dd>
        <dt class="col-6">total maximum torque:</dt>
        <dd class="col-6">330 Nm</dd>
    </dl>
    <dl class="row box">
        <h2>TRANSMISSION</h2>
        <dt class="col-6">1st gear:</dt>
        <dd class="col-6">5,00:1</dd>
        <dt class="col-6 grey">2nd gear:</dt>
        <dd class="col-6">3,20:1</dd>
    </dl>
</div>

我的代码:

for item2 in soup2.find_all(attrs={'class':'col-7'}):
    jj=item2.text

jj 可以从我抓取的网站中提取所有值,但我只需要其中的几个值。例如,我只需要从 GENERAL 中提取座位数和去年生产的值,从 TRANSMISSION 中提取 1 档的值。

结果应该是:

5, available, 5,00:1

【问题讨论】:

  • 您是否尝试过实际解决手头的问题?您的代码似乎并不特别相关。
  • @MadPhysicist 有关系,我已经做了其他部分,这是我需要解决的最后一部分。谢谢。

标签: python web-scraping beautifulsoup


【解决方案1】:

更改 find_values 元组以从 html 文本中获取值

从 bs4 导入 BeautifulSoup 汤 = BeautifulSoup(html, 'html.parser') find_values = ('座位数', '去年生产', '1档') 对于我在 soup.find_all(attrs={'class': 'row box'}): 对于 i.find_all('dt') 中的 j: text = j.get_text().lower().strip() 如果 text.startswith(find_values): 打印(文本,j.find_next_sibling('dd').get_text())

【讨论】:

    【解决方案2】:

    您需要的信息只是标题“座位数”、“去年生产”和“一档”中的下一项,因此您可以使用zip循环遍历该项和下一项。

    all_items = soup.find_all(attrs={'class':'col-6'})
    titles = [
        "number of seats", 
        "last year of production", 
        "1st gear"
    ]
    d = {title: [] for title in titles}
    
    for item, next_item in zip(all_items, all_items[1:]):
        for title in titles:
            if title in item.text:
                d[title].append(next_item.text)
                break
    

    然后d 将包含您需要的所有信息

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2021-05-18
      • 2017-04-20
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2013-12-04
      相关资源
      最近更新 更多