【发布时间】:2015-03-06 21:03:45
【问题描述】:
假设html源码如下:
<html><body>
<div class="aname">
<div class="bname">
<h5><a href="url_a0" class="cname">aTitle</a></h5>
</div>
<div class="">
<div><img src="url_a1"/>img_text<br /></div>
<div><strong>label_a1:</strong>text_a1<br /></div>
<div><strong>label_a2:</strong>text_a2<br /></div>
<div><strong>label_spe:<a href="url_a2">*</a>:</strong>
<span class="box-span" >spantext_a1</span>
<span class="box-span" >spantext_a2</span>
<span class="box-span" >spantext_a3</span><br />
</div>
</div>
</div>
<div class="aname">
<div class="bname">
<h5><a href="url_a0" class="cname">aTitle</a></h5>
</div>
<div class="">
<div><img src="url_a1"/>img_text<br /></div>
<div><strong>label_a1:</strong>text_b1<br /></div>
<div><strong>label_a2:</strong>text_b2<br /></div>
<div><strong>label_a3:</strong>text_b3<br /></div>
<div><strong>label_spe:<a href="url_b3">*</a>:</strong>
<span class="box-span" >spantext_b1</span>
<span class="box-span" >spantext_b2</span>
<span class="box-span" >spantext_b3</span>
<span class="box-span" >spantext_b4</span>
<span class="box-span" >spantext_b5</span>
<span class="box-span" >spantext_b6</span><br />
</div>
</div>
</div>
</body></html>
如果我想要输出是:
aTitle
url_a0
label_a1:
text_a1
label_a2:
text_a2
label_spe:
spantext_a1
spantext_a2
spantext_a3
aTitle
url_a0
label_a1:
text_b1
label_a2:
text_b2
label_a3:
text_b3
label_spe:
spantext_b1
spantext_b2
spantext_b3
spantext_b4
spantext_b5
spantext_b6
我想在 python 中使用 lxml!请帮助我,我该怎么办? 由于 html 有多个 div,并且 span 的数量是可变的。 我已经尝试了很多次,但仍然无法获得正确的输出。 最后,我希望我能从这里得到一些有用的信息!! 我的代码如下:
# -*- coding:utf-8 -*-
import codecs
import lxml,re
import re
from lxml import etree
from lxml.html.clean import Cleaner
def main():
pass
if __name__ == '__main__':
main()
ff = codecs.open('test.html','r',errors='ignore',encoding='utf-8')
html0 = ff.read()
html1 = re.sub('<strong>', '',html0)
html2 = re.sub('</strong>','',html1)
html = re.sub('class=\"box-span\"','',html2)
spelabels = ['img_text', 'label_a1', 'label_a2', 'label_a3']
root = lxml.html.fromstring(html)
contents = root.xpath('.//div[@class="aname"]/div[@class=""]/div/text()')
for content in contents:
if content[0:8] in spelabels:
print(content[0:8])
print(content[9:])
elif content == "label_spe:":
print(content)
nestedcontents = root.xpath('.//div[@class="aname"]/div[@class=""]/div[text()="label_spe:"]/following-sibling::span/text()')
print(nestedcontents)
for nestedcontent in nestedcontents:
print(nestcontent)
输出:
img_text
label_a1
text_a1
label_a2
text_a2
label_spe:
[]
img_text
label_a1
text_b1
label_a2
text_b2
label_a3
text_b3
label_spe:
[]
它似乎部分工作,但我不知道如何提取 url_a1。 span中的文字没有出现”
【问题讨论】:
标签: python-3.x lxml