python应用:爬虫框架Scrapy系统学习第一篇——xpath详解
HTML的三大概念:标签、元素以及属性
标签:尖括号中的文本 例:<head>……</head> 标签通常成对出现
元素:标签中的所有内容 元素中可包含元素
属性:标签的特殊标注等 例:<a href="http:\\www.baidu.com">……</a> 其中,href部分称为属性
使用XPath选择HTML元素
使用‘/’+标签名定位
例: /html/body 将定位到body部分
当某便签下出现多个同标签元素时,使用类似数组的方式定位到最准确的位置
切记:此处下标从1开始,而不是编程中常见的从0开始
例:/html/body/div/p[1] 返回相应位置的第一个p元素
/html/body/div/p 返回相应位置的所有p元素
对于大型文档,精确定位往往需要一个非常大的XPath表达式,为避免这种问题,我们可以使用‘//’语法
例://p 将会选择HTML中所有的p元素
//a 将会选择HTML中所有的链接
同时,//语法可用于层次结构中
例://div//a 得到div元素下所有链接
//div/a 得到div元素直接下级的所有链接
注意:元素下与元素直接下级的区别
此外,可通过符号@来直接定位标签属性
例://a/@href 得到所有链接中的href属性
使用text()函数,只选取文本
例://a/text() 得到所有链接中的文本信息
使用符号*选择指定层级的所有元素
//*[@itemprop="name"] 得到包含itemprop="name"的所有元素
选择包含某个特定属性或特定属性值的标签时使用如下结构
例://a[@href] 得到包含href属性的所有链接
//a[@href="http://www.baidu.com"] 得到href值为“http://www.baidu.com”的所有链接
此外,还可以使用以特定子字符起始或包含的能力
例://a[starts-with(@href, "http://")] 得到href属性以http://为起始的所有链接
//a[contains(@href, "baidu")] 得到href属性包含baidu的所有链接
//a[not (contains(@href, "baidu"))] 得到所有href属性不包含baidu的链接
更多类似函数,参照http://www.w3schools.com/xsl/xsl_functions.asp
在使用XPath时,应尽量
避免使用数组索引;
避免使用与数据关系不密切的类名;
使用面向数据的类名;
ID通常都比较可靠(例外情况:以编程方式生成的包含唯一标记的ID 如“order-F5568”;此外,还需注意部分HTML中ID不唯一的情况)
最新文章
- 城管停车执法打印APP 移动云POS 现场打印告知单-执法平台+智能POS客户端系统
- C语言中的break、continue和goto三者的区别与用法
- [LeetCode] Edit Distance(很好的DP)
- linux ptrace II
- java 从零开始,学习笔记之基础入门<;Oracle_基础>;(三十三)
- JS - 提示是否删除
- memset用法总结
- 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
- python 项目实例
- IOS开发中关于runtime的认识
- Jupyter配置步骤
- layui 弹出层监听 判断弹出框的大小
- Android View事件分发-从源码分析
- IO流(1)File类构造方法
- webpack4重新梳理一下
- windows环境下mongodb下载、安装和使用总结
- properties文件不能输入中文
- RefWorks
- Gradle sync failed: Cannot set the value of read-only property &#39;outputFile&#39;
- Open SQL和Native SQL到底有什么本质的区别