我有一些代码可以解析页面中的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;标签
答案 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