仅选择div标签中的文本

时间:2010-10-26 15:21:46

标签: python urllib

我正在使用urllib开发一个Web解析器。我需要能够只保存位于某个div标签内的行。例如:我正在div“body”中保存所有文本。这意味着将返回div标签中的所有文本。这也意味着如果其中的其他div很好,但是一旦我击中它就停止了。有什么想法吗?

我的想法

  1. 搜索您正在寻找的div 对

  2. 记录位置。

  3. 跟踪中的任何div 未来。 +1为新div -1结束 格。

  4. 当回到0时,你的父母就是你的 DIV?保存位置。

  5. 然后保存来自beginnning的数据 号码到结束号码?

3 个答案:

答案 0 :(得分:3)

如果您对自己解析HTML代码的想法并不感到兴奋,那么有两个不错的选择:

Beautiful Soup

Lxml

你可能会发现lxml的运行速度比BeautifulSoup快,但在我的使用中,Beautiful Soup非常容易学习和使用,并处理了在野外发现的典型蹩脚HTML,我不需要别的什么。

因人而异。

答案 1 :(得分:3)

使用lxml

import lxml.html as lh
content='''\
<body>
<div>AAAA
  <div>BBBB
     <div>CCCC
     </div>DDDD
  </div>EEEE
</div>FFFF
</body>
'''
doc=lh.document_fromstring(content)
div=doc.xpath('./body/div')[0]
print(div.text_content())
# AAAA
#   BBBB
#      CCCC
#      DDDD
#   EEEE

div=doc.xpath('./body/div/div')[0]
print(div.text_content())
# BBBB
#      CCCC
#      DDDD

答案 2 :(得分:0)

就个人而言,我更喜欢lxml,但有时候它的HTML处理有点不对......如果有帮助的话,这是一个BeautifulSoup配方。

from BeautifulSoup import BeautifulSoup, NavigableString

def printText(tags):
    s = []
    for tag in tags :
        if tag.__class__ == NavigableString :
            s.append(tag)
        else :
            s.append(printText(tag))
    return "".join(s)

html = "<html><p>Para 1<div class='stuff'>Div Lead<p>Para 2<blockquote>Quote 1</div><blockquote>Quote 2"
soup = BeautifulSoup(html)

v = soup.find('div', attrs={ 'class': 'stuff'})

print v.text_content