HTML示例代码
html = "<div class="update_details">
<a href="xxxx">2019</a>
<br> //注意这里有两个br标签
<br>
<a href="xxxx">2020</a>
</div>"
我们想选取第二个a标签中的内容2020
,你可能会这么做
from pyquery.pyquery import PyQuery as pq
doc = pq(html)
second_a = doc(".update_details a:nth-child(2)").text()
结果是你什么都没有取到。
为什么呢?因为你认为的顺序是这样的:
- 先查找
所有a标签
- 取出其中的第二个
a标签
事实的顺序是这样的:
- 查找所有的
class="update_details"
子元素 - 取出
第二个
子元素 判断
第二个子元素是不是你给定的那个子元素,即使不是也不会报错,就是取不到文本而已
正确的操作
n的值应该是4
from pyquery.pyquery import PyQuery as pq
doc = pq(html)
second_a = doc(".update_details a:nth-child(4)").text()
这个nth-child(n)
还有一个坑,看下面
html = '<div class="update_details">
<a href="xxxx">2019</a>
<br>
<br>
<a href="xxxx">2020</a>
<div class="inner">
<a href="xxxx">2018</a>
<a href="xxxx">2018</a>
<a href="xxxx">2018</a>
<a href="xxxx">2018</a>
</div>
</div>'
如果内层同样含有a标签
且也在位置4上,那么上述操作会取出两个值
出来。
如果你既想取出内部a标签的值
,又想取出外部的,怎么办呢?步骤如下:
- 先取出内部的值
- 删除内部标签
- 再取出外部标签内容
inner_a = doc(".inner a:nth-child(4)").text() #取内部值
doc(".update_details").remove(".inner").find("a:nth-child(4)").text() #移除内部标签,再取出外部a标签的值