Python 隔离标题和文本

Python 隔离标题和文本,python,html,beautifulsoup,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("d

我有一段代码,它从一个页面中解析出一个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>
返回

样本:

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>


分子式:

C23H30O6

在本例中,我想单独访问标题Mol.Formula:和当前我能够返回的文本“C23H30O6”
分子式:C23H30O6,但不是单个组分。我对beautiful soup非常陌生,不确定如何引用“p”标记的每个组件

您的
findAll(text=True)
方法与beautiful soup的
get_text()
方法做的事情相同。它将获得
标记中的所有文本。如果您有一个稳定的格式,一个简单的方法是:

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

参考子标签问题注释,除“<代码> < P> < /代码> TAG”外,分子式不存在任何标记。

< P>另一种解决问题的方法是在P元素中获得<代码> B<代码>元素,并将其视为您的“标签”,然后:

演示:

>>来自bs4导入组
>>> 
>>>data=”“”
…
...  
…
…摩尔公式:
…
...  
…C23H30O6

... """ >>> >>>soup=BeautifulSoup(数据,“html.parser”) >>> >>>p=汤 >>> >>>标签=p.b >>>value=label.next_sibling.strip() >>>打印(label.get_text(strip=True),值) 分子式:C23H30O6
Ok这是一个很好的解决方案,因为我有一个相对稳定的格式。你知道我如何直接引用p标签吗?我说了10个,只想用一个特定的标题引用3个。我想我可以只使用逻辑运算符:p问题是
标签本身没有属性。您可以获取所有标题为分子式的
标记,然后导航到父节点,例如
strongnode.parent.parent.get_text()
,这实际上是一个很好的响应,也许更优雅。。。你认为在性能上有什么不同吗?因为我想遍历数百万个html文件???@TylerCowan这应该比另一个答案快,但我不认为这部分会成为瓶颈-看看使用“lxml”解析器或“SoupStrainer”是否有助于提高性能。谢谢。如果你正在遍历数以百万计的这些文件,我会更担心被宿主站点限制/阻止。