BeautifulSoup - 如何提取文本而不打开标签和之前的标签?

时间:2015-09-22 01:36:39

标签: python html parsing beautifulsoup html-parsing

我是python和beautifulsoup的新手,花了不少时间试图弄清楚这一个。
我想提取一个没有类的<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&lt;这工作

Route des 4 Vents&lt;不行吗

63810 Bagnols&lt;不行吗

这是我到目前为止的代码:

import urllib
from bs4 import BeautifulSoup    
data = urllib.urlopen(url).read()
soup = BeautifulSoup(data, "html.parser")
name = soup.findAll("h4", class_="actorboxLink")

for a_tag in name:
    print a_tag.text.strip()

我需要像&#34; soup.findAll( </h4> 之后的所有文字)&#34;

我玩过.next_sibling,但我无法使用它。

有什么想法吗?感谢

更新:
我试过这个:

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

给了我:
[u&#39; \ n&#39;,你&#39; \ r \ n \ t \ t \ t \ t \ t \ tDecheterie \ xa0de \ xa0Bagnols \ t \ t \ t \ t \ t \ t&#39;,u& #39; \ n&#39;,u&#39; \ r \ n \ t \ t \ t \ tRoute \ xa0des \ xa04 \ xa0Vents&#39;,u&#39; \ r \ n \ t \ t \ t \ t \ t63810 Bagnols&#39;]

这是一个开始,但我需要重新获得所有的空白和不必要的角色。我尝试使用.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'

2 个答案:

答案 0 :(得分:2)

找到h4元素并使用find_next_siblings()

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

答案 1 :(得分:0)

如果您不需要在不同变量中查找的3个元素中的每一个,您可以使用get_text()上的<div>函数将它们全部放在一个字符串中。如果有其他div标记,但它们都有类,则可以找到<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()
这是python 3&amp; BS4