隔离标题和文字美丽的汤

时间:2017-01-06 18:09:03

标签: python html beautifulsoup

我有一些代码可以解析页面中的div然后找到所有" p"标签有标题和一些文字

样品:

for fn in os.listdir('.'):
     if os.path.isfile(fn):

        url = "%s/%s" % (path, fn)
        page = open(url)
        soup = BeautifulSoup(page,'html.parser')

        soup2 = soup.find("div", {"class": "aui-field-wrapper-content"})

        print soup2.p.prettify()

        for node in soup2.findAll('p'):
                print ''.join(node.findAll(text=True)) 

返回

样品:

<p>
 <b>
  <strong class="TooltipInline" data-toggle="tooltip" title="Molecular formula">
   Mol. formula:
  </strong>
 </b>
 C23H30O6
</p>

在这个例子中,我想单独访问标题Mol。公式:和文字&#34; C23H30O6&#34;目前我能够回归  摩尔。配方:C23H30O6但不是单个组分。我对美丽的汤很新,我不确定如何参考&#34; p&#34;标签

2 个答案:

答案 0 :(得分:1)

findAll(text=True)的方法与Beautiful Soup中的get_text()方法做的相同。它将获取<p>标记中的所有文本。如果你有一个稳定的格式,一个简单的方法是:

ptext = node.get_text().split(':',1)
title = ptext[0].strip()
value = ptext[1].strip()

在参考子标记问题时请注意,除<P>标记外,分子式不在任何标记中。

答案 1 :(得分:1)

解决问题的另一种方法是将b元素放在p元素中,并将其视为&#34;标签&#34;,然后go sideways and get the next sibling element

label = p.b
value = label.next_sibling.strip()
print(label.get_text(strip=True), value)

演示:

>>> from bs4 import BeautifulSoup
>>> 
>>> data = """
... <p>
...  <b>
...   <strong class="TooltipInline" data-toggle="tooltip" title="Molecular formula">
...    Mol. formula:
...   </strong>
...  </b>
...  C23H30O6
... </p>
... """
>>> 
>>> soup = BeautifulSoup(data, "html.parser")
>>> 
>>> p = soup.p
>>> 
>>> label = p.b
>>> value = label.next_sibling.strip()
>>> print(label.get_text(strip=True), value)
Mol. formula: C23H30O6