2014-05-12 33 views
1

这是我使用soup.findAll如何在HTML中提取元素的内容?

myAdds = soup.findAll("div", {"class" : "data"}) 

<div class="data"> 
    <img src="/page1/page2/Images/pic.png" height="13" width="13"> 
    &nbsp; SOME_TEXT 
    </img> 
</div> 

提取固定的HTML内容现在,我只想

SOME_TEXT 

为我的最终结果。我不想从class =“data”中获取tag和 元素。 我尝试使用替换方法,但它没有奏效。我怎样才能得到想要的结果?

+0

Sometext –

+0

@sundarnatarajサンダーナタラジ:没有,'img'是一个空标签。 –

回答

2

你想使用Tag.next_sibling这里,从所包含的图片标签:

>>> soup.find('div', class_='data').img.next_sibling 
u'\n \xa0 SOME_TEXT\n' 

在这种情况下,有没有出现在你的标签任何其他文字反正;您不妨使用Tag.get_text()方法:

>>> soup.find('div', class_='data').get_text() 
u'\n\n \xa0 SOME_TEXT\n' 

如果你有HTML与包含在的文本<img/>标签,那么这就是破HTML和不同的解析器将不同的处理这个问题:

>>> sample = '''\ 
... <div class="data"> 
... <img src="/page1/page2/Images/pic.png" height="13" width="13"> 
... &nbsp; SOME_TEXT 
... </img> 
... </div> 
... ''' 
>>> soup = BeautifulSoup(sample, 'html.parser') 
>>> soup.div 
<div class="data"> 
<img height="13" src="/page1/page2/Images/pic.png" width="13"> 
      SOME_TEXT 
    </img> 
</div> 
>>> soup = BeautifulSoup(sample, 'lxml') 
>>> soup.div 
<div class="data"> 
<img height="13" src="/page1/page2/Images/pic.png" width="13"/> 
      SOME_TEXT 

</div> 
>>> soup = BeautifulSoup(sample, 'html.parser') 
>>> soup.div 
<div class="data"> 
<img height="13" src="/page1/page2/Images/pic.png" width="13"> 
      SOME_TEXT 
    </img> 
</div> 

在所有这些情况下,Tag.get_text()都可以使用。

+0

我将所有结果存储在myAdds中。对于myAdds的每个元素,我想提取“SOME_TEXT”。我现在不能用汤。它就像 '对于myAdds中的x: solve_for(x)' – impossible

+0

@Arewegood:是的,你可以;你有一个结果列表,包含BeautifulSoup元素。 '在myAdds中输入x:print x.img.next_sibling'。 –

+0

请参阅编辑的html。我有'   SOME_TEXT'这个,我想提取“SOME_TEXT”。并通过使用x.img.next_sibling我得到“无”每个x。 – impossible

0
abc=""" 
<div class="data"> 
    <img src="/page1/page2/Images/pic.png" height="13" width="13"> 
    &nbsp; SOME_TEXT 
</div> """ 


from BeautifulSoup import BeautifulSoup as BS 
s=BS(abc,convertEntities=BS.HTML_ENTITIES) 
s.text 

u'SOME_TEXT' 
+0

BeautifulSoup 3多年前已停产;你必须假设用户最近使用BeautifulSoup 4。 –

+0

另外,不要仅仅在用户没有解释的情况下转储代码。请包括一些关于为什么代码应该工作的说明。 –

0
from BeautifulSoup import BeautifulSoup 

VAR =""" 
<div class="data"> 
    <img src="/page1/page2/Images/pic.png" height="13" width="13"> 
    &nbsp; SOME_TEXT 
</div> 
""" 
myAdds = BeautifulSoup(VAR,convertEntities=BeautifulSoup.HTML_ENTITIES) 
print myAdds.text 
+0

我得到这个错误: :类型对象'BeautifulSoup'没有属性'HTML_ENTITIES' – impossible

+0

再次,BeautifulSoup 3已经停止*多年*现在。OP使用BeautifulSoup 4;在Web上发现的BeautifulSoup 3代码重复片段没有多少意义,没有测试或显示它们的工作方式。不要只将代码转储到答案中,也不要使用远远落后的代码。 –