pyquery中关于nth-child(n)选取不到指定元素的问题

HTML示例代码

html = "
"xxxx">2019
//注意这里有两个br标签
"xxxx">2020
"

我们想选取第二个a标签中的内容2020,你可能会这么做

from pyquery.pyquery import PyQuery as pq
doc = pq(html)
second_a = doc(".update_details a:nth-child(2)").text()

结果是你什么都没有取到。
为什么呢?因为你认为的顺序是这样的:

  1. 先查找所有a标签
  2. 取出其中的第二个a标签

事实的顺序是这样的:

  1. 查找所有的class="update_details"子元素
  2. 取出第二个子元素
  3. 判断第二个子元素是不是你给定的那个子元素,即使不是也不会报错,就是取不到文本而已

正确的操作

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 = ''

如果内层同样含有a标签且也在位置4上,那么上述操作会取出两个值出来。
如果你既想取出内部a标签的值,又想取出外部的,怎么办呢?步骤如下:

  1. 先取出内部的值
  2. 删除内部标签
  3. 再取出外部标签内容
inner_a = doc(".inner a:nth-child(4)").text() #取内部值
doc(".update_details").remove(".inner").find("a:nth-child(4)").text() #移除内部标签,再取出外部a标签的值

你可能感兴趣的:(爬虫)