使用Beautiful Soup和python返回<b>值

时间:2017-10-22 08:01:22

标签: python beautifulsoup

以下是html页面的示例。尝试创建一个数据集,其中标记<b>下的值将是标题,标记<span>的值将是它们的值。怎么做。请帮忙。

<div class ="profile">

        <P class="info">
          <b>Full name</b>
          <span>Raju Kumar</span>
        </p>

        <P class="info">
          <b>DOB</b>
          <span>05/06/1992</span>
        </p>

        <P class="info">
          <b>DOB</b>
          <span>05/06/1992</span>
        </p>



</div>

以下是我尝试将<b>标记值作为标题。但它只返回第一个<b>标记值。

header = [h.string for h in soup.find('p', class_='info').find_all('b')]

3 个答案:

答案 0 :(得分:1)

您可以使用以下行获取列表:

values = [(p.find('b').string, p.find('span').string) 
             for p in soup.find_all('p', class_='info')]

如果您更喜欢字典格式:

dict_values = {p.find('b').string: p.find('span').string 
                  for p in soup.find_all('p', class_='info') }

修改

如果您需要构建数据框,

你有方法DataFrame.from_items,给定一系列对:

values = [(p.find('b').string, p.find('span').string) 
             for p in soup.find_all('p', class_='info')]
value_df = pandas.DataFrame.from_items(values)

或者您可以使用DataFrame.from_dict

dict_values = {p.find('b').get_txt():p.find('span').get_txt() 
                  for p in soup.find_all('p', class_='info') }
value_df = pandas.DataFrame.from_dict(dict_values)

答案 1 :(得分:1)

如果我理解正确,你需要循环两次:

header = [b.string for h in soup.find_all('p', class_='info') for b in h.find_all('b')]

答案 2 :(得分:0)

您只使用p找到第一个soup.find - 使用soup.find_all,就像使用b标记

一样