<li class="lx1">
<div class="tit">
<a href="#">链接</a>
</div>
<div class="inf">
...
</div>
</li>
<li class="lx1">
<div class="tit">
<a href="#">链接</a>
</div>
<div class="inf">
...
</div>
</li>
<li class="lx1">
<div class="tit">
<a href="#">链接</a>
</div>
<div class="inf">
...
</div>
</li>
我先用'//div[@class="lx1"]'获取所有的li,现在取到的是一个list,里面是etree的element,
然后再for i in elements:循环再对每个i用xpath查询'//div[@class='tit']/a/text()'来获取每个li下面的a标签的文字,
但是我用i.xpath()取获取到的a标签不止当前li下面的,它就像是对整个html执行了这个xpath,把其他li下面的a也查出来了。。。
望各位指正一下
7 个解决方案
#1
'.//div[@class='tit']/a/text()'
#2
版主,是不是取出来的<li>的list再用xpath的话实际上是对整个页面使用的啊?我打印每个li都是不一样的,但是只要用xpath去每个li里面再去取东西就会把整个html里面的a都取出来,懵逼
#3
你用for i in elements:应该都会查出来吧
#4
感觉并没有
输出:
<Element 'li' at 0x7f491d1530e8>
链接1
链接1.1
<Element 'li' at 0x7f4914feb4f8>
链接2
<Element 'li' at 0x7f4914feb638>
链接3
text.xml:
import xml.etree.ElementTree as etree
tree =etree.parse('text.xml')
lis=tree.findall("//li[@class='{}']".format('lx1'))
for li in lis:
print(li)
aa=li.findall(".//div[@class='{}']/a".format('tit'))
for a in aa:
print(a.text)
输出:
<Element 'li' at 0x7f491d1530e8>
链接1
链接1.1
<Element 'li' at 0x7f4914feb4f8>
链接2
<Element 'li' at 0x7f4914feb638>
链接3
text.xml:
<root>
<li class="lx1">
<div class="tit">
<a href="#">链接1</a>
</div>
<div class="inf">
<div class="tit">
<a href="#">链接1.1</a>
</div>
</div>
</li>
<li class="lx1">
<div class="tit">
<a href="#">链接2</a>
</div>
<div class="inf">
...
</div>
</li>
<li class="lx1">
<div class="tit">
<a href="#">链接3</a>
</div>
<div class="inf">
...
</div>
</li>
</root>
#5
我没有用findall用了两次xpath就会查出所有的,用老哥你这样的就没问题,感谢了,我看看为啥子会有这种区别
#6
上午弄来弄去最后每次我先把for i in eles: 的i转换为str,然后我再把它转换etree.HTML(str),再查就不会把所有的查出来,感觉好蠢啊
#7
推荐你用更简单的库 pyquery
https://www.cnblogs.com/lei0213/p/7676254.html
https://www.cnblogs.com/lei0213/p/7676254.html
#1
'.//div[@class='tit']/a/text()'
#2
版主,是不是取出来的<li>的list再用xpath的话实际上是对整个页面使用的啊?我打印每个li都是不一样的,但是只要用xpath去每个li里面再去取东西就会把整个html里面的a都取出来,懵逼
#3
你用for i in elements:应该都会查出来吧
#4
感觉并没有
输出:
<Element 'li' at 0x7f491d1530e8>
链接1
链接1.1
<Element 'li' at 0x7f4914feb4f8>
链接2
<Element 'li' at 0x7f4914feb638>
链接3
text.xml:
import xml.etree.ElementTree as etree
tree =etree.parse('text.xml')
lis=tree.findall("//li[@class='{}']".format('lx1'))
for li in lis:
print(li)
aa=li.findall(".//div[@class='{}']/a".format('tit'))
for a in aa:
print(a.text)
输出:
<Element 'li' at 0x7f491d1530e8>
链接1
链接1.1
<Element 'li' at 0x7f4914feb4f8>
链接2
<Element 'li' at 0x7f4914feb638>
链接3
text.xml:
<root>
<li class="lx1">
<div class="tit">
<a href="#">链接1</a>
</div>
<div class="inf">
<div class="tit">
<a href="#">链接1.1</a>
</div>
</div>
</li>
<li class="lx1">
<div class="tit">
<a href="#">链接2</a>
</div>
<div class="inf">
...
</div>
</li>
<li class="lx1">
<div class="tit">
<a href="#">链接3</a>
</div>
<div class="inf">
...
</div>
</li>
</root>
#5
我没有用findall用了两次xpath就会查出所有的,用老哥你这样的就没问题,感谢了,我看看为啥子会有这种区别
#6
上午弄来弄去最后每次我先把for i in eles: 的i转换为str,然后我再把它转换etree.HTML(str),再查就不会把所有的查出来,感觉好蠢啊
#7
推荐你用更简单的库 pyquery
https://www.cnblogs.com/lei0213/p/7676254.html
https://www.cnblogs.com/lei0213/p/7676254.html