首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

仅当<li> string-length()大于20个字符时,才能在<ul>祖先中获取子<a> @href属性

答案:

这个问答内容涉及到XPath语法中的一个问题。XPath是一种用于在XML文档中定位节点的语言。在这个问题中,我们需要判断字符串的长度是否大于20个字符,并且只有在字符串长度大于20个字符时,才能获取祖先节点中子节点的href属性。

首先,我们可以使用XPath中的string-length()函数来获取字符串的长度。该函数的语法为string-length(string),其中string是要计算长度的字符串。在这个问题中,我们需要计算的是子节点的文本内容,因此可以将string-length()函数应用于子节点的文本内容。

接下来,我们需要获取子节点的祖先节点。在XPath中,可以使用"//"来表示任意深度的节点。因此,我们可以使用"//ul//a"来获取所有ul节点下的a节点。

最后,我们需要判断字符串长度是否大于20个字符。在XPath中,可以使用谓语(predicate)来过滤节点。谓语是放在方括号中的条件表达式,用于筛选满足条件的节点。在这个问题中,我们可以使用谓语来判断子节点的文本内容的长度是否大于20个字符。

综上所述,完整的XPath表达式为://ul//a[string-length(text()) > 20]/@href

这个表达式的含义是:获取所有ul节点下的a节点,其中a节点的文本内容长度大于20个字符,并且返回这些a节点的href属性。

在腾讯云的产品中,可以使用腾讯云的云原生数据库TDSQL来存储和管理XML文档,并使用腾讯云的云函数SCF来执行XPath查询操作。TDSQL是一种高可用、可扩展、全球分布的云原生数据库,支持MySQL和PostgreSQL引擎。SCF是一种事件驱动的无服务器计算服务,可以在云端运行代码逻辑。

腾讯云云原生数据库TDSQL产品介绍链接:https://cloud.tencent.com/product/tdsql 腾讯云云函数SCF产品介绍链接:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • python3解析库lxml

    >] 如要获取li节点,可以使用//后面加上节点名称,然后调用xpath()方法 html.xpath('//li') #获取所有子孙节点的li节点 (4)获取节点 通过/或者//即可查找元素的节点或者子孙节点...@符号即可获取节点的属性,如下:获取所有li节点下所有a节点的href属性 result=html.xpath('//li/a/@href') #获取a的href属性 result=html.xpath...('//li//@href') #获取所有li子孙节点的href属性 (9)属性多值匹配 如果某个属性的值有多个,我们可以使用contains()函数来获取 from lxml import etree...,这时可以利用括号引入索引的方法获取特定次序的节点: from lxml import etree text1=''' <li class="aaa"...#获取div祖先节点 result2=html.xpath('//li[1]/attribute::*') #获取所有属性值 result3=html.xpath('//li[1]/child::*'

    90020

    Python3解析库lxml

    >] 如要获取li节点,可以使用//后面加上节点名称,然后调用xpath()方法 html.xpath('//li') #获取所有子孙节点的li节点 (4)获取节点 通过/或者//即可查找元素的节点或者子孙节点...@符号即可获取节点的属性,如下:获取所有li节点下所有a节点的href属性 result=html.xpath('//li/a/@href') #获取a的href属性 result=html.xpath...('//li//@href') #获取所有li子孙节点的href属性 (9)属性多值匹配 如果某个属性的值有多个,我们可以使用contains()函数来获取 from lxml import etree...,这时可以利用括号引入索引的方法获取特定次序的节点: from lxml import etree text1=''' <li class="aaa"...#获取div祖先节点 result2=html.xpath('//li[1]/attribute::*') #获取所有属性值 result3=html.xpath('//li[1]/child::*'

    1.7K40

    Python爬虫 pyquery库详解

    这里的父节点是该节点的直接父节点,也就是说,它不会再去查找父节点的父节点,即祖先节点。 但是如果想获取某个祖先节点,该怎么办呢?...每个 li 节点还可以调用前面所说的方法进行选择,比如继续查询节点,寻找某个祖先节点等,非常灵活。 6. 获取信息 提取到节点之后,我们的最终目的当然是提取节点所包含的信息了。...在这个方法传入属性的名称,就可以得到这个属性值了。...这是因为,返回结果包含多个节点,调用 attr 方法,只会得到第一个节点的属性。...因此,在进行属性获取,可以观察返回节点是一个还是多个,如果是多个,则需要遍历才能依次获取每个节点的属性

    22310

    Python爬虫从入门到精通——解析库pyquery的使用「建议收藏」

    查找节点 下面我们介绍一些常用的查询函数,这些函数和jQuery函数的用法完全相同。 节点 查找节点,需要用到find()方法,此时传入的参数是CSS选择器。...每个li节点还可以调用前面所说的方法进行选择,比如继续查询节点,寻找某个祖先节点等,非常灵活。 获取信息 提取到节点之后,我们的最终目的是提取节点所包含的信息。...在这个方法传入属性的名称,就可以得到这个属性值了。 link4.html 此外,也可以通过调用attr属性获取属性: print(a.attr.href) 这两种方法的结果完全一样。...这是因为,返回结果包含多个节点,调用attr()方法,只会得到第一个节点的属性。....html 因此,在进行属性获取,可以观察返回节点是一个还是多个,如果是多个,则需要遍历才能依次获取每个节点的属性

    67810

    python爬虫之lxml库xpath的基本使用

    >] 如要获取li节点,可以使用//后面加上节点名称,然后调用xpath()方法 html.xpath('//li') #获取所有子孙节点的li节点 2获取节点 通过/或者//即可查找元素的节点或者子孙节点...符号即可获取节点的属性,如下:获取所有li节点下所有a节点的href属性 result=html.xpath('//li/a/@href') #获取a的href属性 result=html.xpath...('//li//@href') #获取所有li子孙节点的href属性 7属性多值匹配 如果某个属性的值有多个,我们可以使用contains()函数来获取 from lxml import etree...这时可以利用括号引入索引的方法获取特定次序的节点: from lxml import etree text1=''' <li class="aaa"...#获取div祖先节点 result2=html.xpath('//li[1]/attribute::*') #获取所有属性值 result3=html.xpath('//li[1]/child::*'

    1.1K20

    Python3网络爬虫实战-28、解析库

    那么在页面解析,我们利用 XPath 或 CSS 选择器来提取到某个节点,然后再调用相应的方法去获取它的正文内容或者属性不就可以提取我们想要的任意信息了吗?...但是这里如果我们用 //ul/a 就无法获取任何结果了,因为 / 是获取直接节点,而在 ul 节点下没有直接的 a 节点,只有 li 节点,所以无法获取任何匹配结果,代码如下: from lxml...href 属性,注意此处和属性匹配的方法不同,属性匹配是括号加属性名和值来限定某个属性,如 [@href="link1.html"],而此处的 @href 指的是获取节点的某个属性,二者需要做好区分...多属性匹配 另外我们可能还遇到一种情况,我们可能需要根据多个属性才能确定一个节点,这是就需要同时匹配多个属性可以,那么这里可以使用运算符 and 来连接,示例如下: from lxml import...第四次选择我们调用了 child 轴,可以获取所有直接节点,在这里我们又加了限定条件选取 href 属性为 link1.html 的 a 节点。

    2.3K20

    学爬虫利器XPath,看这一篇就够了

    但是这里如果我们用 //ul/a 就无法获取任何结果了,因为 / 是获取直接节点,而在 ul 节点下没有直接的 a 节点,只有 li 节点,所以无法获取任何匹配结果,代码如下: from lxml...href 属性,注意此处和属性匹配的方法不同,属性匹配是括号加属性名和值来限定某个属性,如 [@href="https://ask.hellobi.com/link1.html"],而此处的 @href...多属性匹配 另外我们可能还遇到一种情况,我们可能需要根据多个属性才能确定一个节点,这是就需要同时匹配多个属性可以,那么这里可以使用运算符 and 来连接,示例如下: from lxml import...>] 第一次选择我们调用了 ancestor 轴,可以获取所有祖先节点,其后需要跟两个冒号,然后是节点的选择器,这里我们直接使用了 *,表示匹配所有节点,因此返回结果是第一个 li 节点的所有祖先节点,...第四次选择我们调用了 child 轴,可以获取所有直接节点,在这里我们又加了限定条件选取 href 属性为 link1.html 的 a 节点。

    1.9K21

    Python3网络爬虫实战-30、PyQ

    这里的父节点是该节点的直接父节点,也就是说,它不会再去查找父节点的父节点,即祖先节点。 但是如果我们想获取某个祖先节点怎么办呢?...items() 方法后,会得到一个生成器,遍历一下,就可以逐个得到 li 节点对象了,它的类型也是 PyQuery 类型,所以每个 li 节点还可以调用前面所说的方法进行选择,比如继续查询节点,寻找某个祖先节点等等...也可以通过调用 attr 属性获取属性,用法如下: print(a.attr.href) 结果: link3.html 结果是完全一样的,在这里我们没有调用方法,而是调用了 attr 属性,然后再调用属性名...所以返回结果包含多个节点,调用 attr() 方法只会得到第一个节点的属性。...所以,在进行属性获取的时候观察一下返回节点是一个还是多个,如果是多个,则需要遍历才能依次获取每个节点的属性

    96010

    JavaWeb(八)JQuery

    jQuery 对象与dom 对象可以相互转换的,转换之后它们就可以相互调用了 jQuery 选择器 注意,如果获取到多个元素将是一个数组,可以直接用数组的属性方法,比如 length 当前元素: 1...li:eq(3)") 列表的第四个元素(index 从 0 开始) :gt(no) $("ul li:gt(3)") 列出 index 大于 3 的元素 :lt(no) $("ul li:lt(3)....closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素。 .contents() 获得匹配元素集合每个元素的元素,包括文本和注释节点。....parents() 获得当前匹配元素集合每个元素的祖先元素,由选择器筛选(可选)。 .parentsUntil() 获得当前匹配元素集合每个元素的祖先元素,直到遇到匹配选择器的元素为止。...>ul (祖父) 27 li (直接父) 28 span 29 30 31 </div

    1.8K40

    python爬虫常用库之BeautifulSoup详解

    所以上面的href就是标签属性名字,等号右边的就是属性的值,上面的值是个网址 # 获取标签属性 print(soup.li.a['href']) # 第一种 print(soup.li.a.attrs...,就是所有后代 子孙节点: 豆瓣 从上面知道,li标签是ul标签的标签,a标签是li标签的标签,若此时我们获取的是ul标签,所以li标签和...这里用到了.descendants属性获取的是div标签的子孙节点,而且返回结果是一个迭代器 9)获取父节点和所有祖先节点 既然有了节点和子孙节点,反过来也是有父节点和祖先节点的,所以都很容易理解的...parents就是获取所有的祖先节点,返回的是一个生成器 10)获取兄弟节点 兄弟节点: 豆瓣1 豆瓣2 <...()) # 里面可以包含标签,会将标签的内容连同输出 .get_tex()方法和前面的.string属性有点不一样哈,这里的他会获取该标签的所有文本内容,不管有没有标签 写在最后 以上的这些都是个人在学习过程做的一点笔记

    87070

    Python3BeautifulSoup的使用方法

    ,接下来如果要获取name属性,就相当于从字典获取某个键值,只需要用括号加属性名称就可以得到结果了,比如获取name属性就可以通过attrs['name']得到相应的属性值。...比如name属性的值是唯一的,返回的结果就是单个字符串,而对于class,一个节点元素可能由多个class,所以返回的是列表,所以在实际处理过程要注意判断类型。...父节点和祖先节点 如果要获取某个节点元素的父节点,可以调用parent属性。...注意到这里输出的仅仅是a标签的直接父节点,而没有再向外寻找父节点的祖先节点,如果我们要想获取所有的祖先节点,可以调用parents属性。...(ul['id']) print(ul.attrs['id']) 运行结果: list-1 list-1 list-2 list-2 可以看到直接传入括号和属性名和通过attrs属性获取属性值都是可以成功的

    3.7K30

    Python3网络爬虫实战-29、解析库

    接下来我们又尝试选择了 head 节点,结果也是节点加其内部的所有内容,再接下来选择了 p 节点,不过这次情况比较特殊,我们发现结果是第一个 p 节点的内容,后面的几个 p 节点并没有选择到,也就是说,有多个节点...,接下来如果要获取 name 属性,就相当于从字典获取某个键值,只需要用括号加属性名称就可以得到结果了,比如获取 name 属性就可以通过 attrs['name'] 得到相应的属性值。...比如 name 属性的值是唯一的,返回的结果就是单个字符串,而对于 class,一个节点元素可能由多个 class,所以返回的是列表,所以在实际处理过程要注意判断类型。...注意到这里输出的仅仅是 a 节点的直接父节点,而没有再向外寻找父节点的祖先节点,如果我们要想获取所有的祖先节点,可以调用 parents 属性: html = """ ...(ul['id']) print(ul.attrs['id']) 运行结果: list-1 list-1 list-2 list-2 可以看到直接传入括号和属性名和通过 attrs 属性获取属性值都是可以成功的

    1.8K30

    Python爬虫 Beautiful Soup库详解

    也就是说,有多个节点,这种选择方式只会选择到第一个匹配的节点,其他的后面节点都会忽略。 提取信息 上面演示了调用 string 属性获取文本的值,那么如何获取节点属性的值呢?如何获取节点名呢?...接下来,如果要获取 name 属性,就相当于从字典获取某个键值,只需要用括号加属性名就可以了。比如,要获取 name 属性,就可以通过 attrs['name'] 来得到。...其实这样有点烦琐,还有一种更简单的获取方式:可以不用写 attrs,直接在节点元素后面加括号,传入属性名就可以获取属性值了。...比如,name 属性的值是唯一的,返回的结果就是单个字符串。而对于 class,一个节点元素可能有多个 class,所以返回的是列表。在实际处理过程,我们要注意判断类型。...这里用列表输出了它的索引和内容,而列表的元素就是 a 节点的祖先节点。 兄弟节点 上面说明了节点和父节点的获取方式,如果要获取同级的节点(也就是兄弟节点),应该怎么办呢?

    21710
    领券