Xpath轴与步长应用:取某节点下所有子孙节点里的文本内容

最近遇到个需求,需要爬一些数据使用,写好了爬虫后爬到了一段HTML,然后用lxml解析,接下来就是定位到具体节点提取内容。遇到了一个问题,想要提取的内容在一个class名为full-content的<div>中,文本内容有可能就在div中,可有可能在子孙节点中,那怎么全部提取呢?查了一下Xpath有轴与步长的用法,

详细用法参考:http://www.w3school.com.cn/xpath/xpath_axes.asp

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute 选取当前节点的所有属性。
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
namespace 选取当前节点的所有命名空间节点。
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。

因此:用以下Xpath表达式解决了问题。

"//div[@class="full-content"]/descendant::text()"

  方法二:

Xpath选取多个路径也可以用以下方式实现:

A路径|B路径

  

原文地址:https://www.cnblogs.com/liangzp/p/9158623.html

时间: 2024-10-31 03:17:22

Xpath轴与步长应用:取某节点下所有子孙节点里的文本内容的相关文章

C# 复制指定节点的所有子孙节点到新建的节点下

XML结构: 新建一个mask_list节点,一个procedure节点,将上面的mask_list和procedure节点的所有子孙节点添加到新建的mask_list和procedure节点 XmlElement mask_list = xmlDoc.CreateElement("mask_list"); XmlElement procedure = xmlDoc.CreateElement("procedure"); XmlNode xn_mask_list =

configSections必须是根节点下第一个节点

对webconfig文档进行配置,添加了一个节点configSectionS,添加时,我自个想,按节点的名称以字母排序,就放在appSettings节点下. 谁知,在程序运行时,出现了错误: 参考上面高亮提示,把configSections放在根节点下第一个位置: 再次运行程序,结果竟正常修复...... 原文地址:https://www.cnblogs.com/insus/p/9829231.html

SQL查询父节点下的所有子节点(包括子节点下的子节点,无限子节点)

-->Title:Generating test data -->Author:wufeng4552 -->Date :2009-09-30 08:52:38 set nocount on if object_id('tb','U')is not null drop table tb go create table tb(ID int, ParentID int) insert into tb select 1,0 insert into tb select 2,1 insert int

JavaScript基础 删除属性removeAttribute 删除Body节点下第一个子节点的style属性

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

sql 递归(查找一个节点下的所有节点)

--这是查找菜单 第一行是一级菜单,下面是二级菜单 with temp as ( select MenuCode,ParentCode,MenuName,URL,1 as curMenuLevel from sys_menu where (ParentCode is null or ParentCode = '') and MenuCode='pms' union all select a.MenuCode,a.ParentCode,a.MenuName,a.URL, b.curMenuLeve

无限极分类查找所有子孙节点的改进算法

在以前,遇到无限极分类返回一个节点的所有子孙节点时,我都是用递归计算的,后来发现时间复杂度和空间复杂度都太高了,后来自己研究了一下改进了算法. 节点数据如下:键值对分别是自己对应父亲节点 <?php $tree=array( 1=>0, 2=>1, 3=>2, 4=>3, 5=>4, 6=>5, 7=>6, 8=>7, 9=>8, 10=>9, 11=>10, ); ?> 以往算法如下: <?php function ge

XPath 轴

XML 实例文档 我们将在下面的例子中使用此 XML 文档: <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> &l

xpath 轴定位表达方式

xpath的使用基本语法: 1.// 从根节点开始,查找对象是全文. 2./ 从当前标签的路径开始查找 3.text()获取当前路径下的文本 [email protected]+类名或者id名 查找类名或者id的名字 5. .一个点表示当前节点 (1)获取某个标签的内容 (2)根据标签属性来查找指定的标签,获取指定标签的属性 (3)找指定的文本内容 (4)获取指定id名字的标签的文本 (5)获取指定类名的文本 (6)contains包含指定属性 轴运算名称: ancestor::* 表示当前节点

XPath 轴 Axes

轴名称 描述 child 选取当前节点的所有子元素 parent 选取当前节点的父节点 descendant 选取当前节点的所有后代元素(子.孙等) ancestor 选取当前节点的所有先辈(父.祖父等) descendant-or-self 选取当前节点的所有后代元素(子.孙等)以及当前节点本身 ancestor-or-self 选取当前节点的所有先辈(父.祖父等)以及当前节点本身 preceding-sibling 选取当前节点之前的所有同级节点 following-sibling 选取当前