当他们在同一个班级时,如何使用漂亮的汤提取数据(文本)?

时间:2019-06-26 13:33:40

标签: python html beautifulsoup

我正在做一个个人项目,我从网站上抓取数据。我正在尝试使用漂亮的汤来做到这一点,但是我遇到了相同类但属性不同的数据。例如:

build: {
    /*
    ** Run ESLint on save
    */
    babel: {
      presets({ isServer }) {
        return [
          [
            require.resolve('@nuxt/babel-preset-app'),
            // require.resolve('@nuxt/babel-preset-app-edge'), // For nuxt-edge users
            {
              buildTarget: isServer ? 'server' : 'client',
              corejs: { version: 3 }
            }
          ]
        ]
      }
    },
    extend (config, { isDev, isClient }) {
      if (isDev && isClient) {
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/
        })
      }
    },
    transpile: [/vue-awesome/]
  }

我如何仅能获得$ 11.99 / kg?现在我正在 $ 11.99 /千克 $ 5.44 /磅。

我已经完成了x.select('。pi--secondary-price'),但它同时返回了两个价格。我如何只获得1个价格(11.99美元/千克)?

1 个答案:

答案 0 :(得分:2)

您可以首先获取<abbr>标签,然后搜索相应的父标签。像这样:

from bs4 import BeautifulSoup

html = '''
<div class="pi--secondary-price">
<span class="pi--price">$11.99 /<abbr title="Kilogram">kg</abbr></span>
<span class="pi--price">$5.44 /<abbr title="Pound">lb.</abbr></span>
</div>
'''  

soup = BeautifulSoup(html, 'html.parser')

kg = soup.find(title="Kilogram")
print(kg.parent.text)

这将为您提供所需的输出$11.99 /kg。有关更多信息,请参见BeautifulSoup documentation