如何在HTML中提取元素的内容?

时间:2014-05-12 09:05:21

标签: python html string beautifulsoup

这是我使用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> 

现在,我只想要

SOME_TEXT

作为我的最终结果。我既不想要class =“data”中的标签和元素。 我尝试使用替换方法,但它没有用。我怎样才能得到理想的结果?

3 个答案:

答案 0 :(得分: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()都可以。

答案 1 :(得分: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'

答案 2 :(得分: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