BeautifulSoup如何在不打开标签和<br>标签之前提取文本?

2024-10-01 15:46:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python和beauthoulsoup的新手,花了好几个小时试图弄明白这一点。
我想在一个没有类的<div>中提取三个特定的文本摘要。
我想要的第一个文本提取是在一个<a>标记内,该标记位于<h4>标记内。我设法把它提取出来。
第二个文本摘录紧跟在结束的h4标记</h4>之后,紧跟着一个<br>标记。
第三个文本提取紧跟在第二个文本提取之后的<br>标记之后,后面还紧跟着一个<br>标记。在

这里是我使用的html摘录:

<div>
    <h4 class="actorboxLink">
    <a href="/a-decheterie-de-bagnols-2689">Decheterie de Bagnols</a>
    </h4>
    Route des 4 Vents<br>
    63810 Bagnols<br>
</div>

我想摘录:

Decheterie de Bagnols<;有效

路线des 4通风口不工作

63810 Bagnols<;不工作

以下是我目前掌握的代码:

^{pr2}$

我需要类似“的东西”芬德尔汤(所有</h4>之后的文本)”

我玩过using。下一个兄弟姐妹,但我不能让它发挥作用。在

有什么想法吗?谢谢

更新:
我试过了:

for a_tag in classActorboxLink:
    print a_tag.find_all_next(string=True, limit=5) 

这让我:
[u'\n',u'\r\n\t\t\t\t\t技术中心\xa0de\xa0Bagnols\t\t\t\t\t',u'\n',u'\r\n\t\t\t\tRoute\xa0des\xa04\xa0Vents',u'\r\n\t\t\t\t63810 Bagnols']

这是一个开始,但我需要重新喜欢所有的空白和不必要的字符。我试过使用.strip().strings.stripped_strings,但是没有用。示例:

for a_tag in classActorboxLink.strings

for a_tag in classActorboxLink.stripped_strings

print a_tag.find_all_next(string=True, limit=5).strip() 

对于这三个我都得到了:

AttributeError: 'ResultSet' object has no attribute 'strings/stripped_strings/strip'

Tags: in标记文本brdivfortagde
2条回答

如果您不需要在不同变量中查找的3个元素中的每一个,那么您可以使用<div>上的get_text()函数将它们全部放在一个字符串中。如果还有其他的div标记,但是它们都有类,那么您可以找到所有带有class=false的{}。如果您不能隔离您感兴趣的<div>,那么此解决方案将不适用于您。在

import urllib
from bs4 import BeautifulSoup    
data = urllib.urlopen(url).read()
soup = BeautifulSoup(data, "html.parser")

for name in soup.find_all("div", class=false)
     print name.get_text().strip()

顺便说一句,这是python3&bs4

找到h4元素并使用^{}

h4s = soup.find_all("h4", class_="actorboxLink")
for h4 in h4s:
    for text in h4.find_next_siblings(text=True):
        print(text.strip())

相关问题 更多 >

    热门问题