我正在使用urllib开发一个Web解析器。我需要能够只保存位于某个div标签内的行。例如:我正在div“body”中保存所有文本。这意味着将返回div标签中的所有文本。这也意味着如果其中的其他div很好,但是一旦我击中它就停止了。有什么想法吗?
我的想法
搜索您正在寻找的div 对
记录位置。
跟踪中的任何div 未来。 +1为新div -1结束 格。
当回到0时,你的父母就是你的 DIV?保存位置。
然后保存来自beginnning的数据 号码到结束号码?
答案 0 :(得分:3)
如果您对自己解析HTML代码的想法并不感到兴奋,那么有两个不错的选择:
你可能会发现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