Scrapy_XPath选择器
文章目录
- XPath选择器
- 基础语法
- /:描述一个从根开始的绝对路径
- E1/E2: 选中E1子节点中的所有E2节点
- //E: 选中文档中的所有E,无论在什么位置
- E1//E2: 选中E1后代节点中的所有E2节点,无论在后代中的什么位置
- E/text(): 选中E节点的文本
- E/*: 选中E的所有元素子节点
- */E: 选中孙节点中的所有E节点
- E/@ATTR : 选中E节点中的ATTR属性值
- //@ATTR : 选中文档中所有ATTR属性
- E/@*: 选中E节点的所有属性值
- . : 选中当前节点,用来描述相对路径
- . . : 选中当前节点的父节点,用来描述相对路径
- node[谓语] : 谓语用来查找某个特定的节点或者包含某个特定值的节点
- 常用函数
- string(arg): 返回参数的字符串值,包括子孙节点
- contains(str1, str2): 判断str1中是否包含str2,返回布尔值
XPath选择器
XPath即XML路径语言,它是一种用来确定xml文档中某个部分位置的语言
基础语法
下面通过一个HTML文档讲解各个语法
from scrapy.selector import Selector
from scrapy.http import HtmlResponsebody = """
<html><head><base href = "http://www.baidu.com" /><title>User23333</title></head><body><h1>Hello World</h1><h1>Hello Scrapy</h1><b>Hello Python</b><ul><li>Python学习手册<b>价格:99.00元</b></li><li>Python核心编程<b>价格:88.00元</b></li><li>Python基础教程<b>价格:80.00元</b></li></ul> <div id = "images"><a href = "image1.html">Name: Iamge 1</br><img src = "image1.jpg"/></a><a href = "image2.html">Name: Iamge 2</br><img src = "image2.jpg"/></a><a href = "image3.html">Name: Iamge 3</br><img src = "image3.jpg"/></a><a href = "image4.html">Name: Iamge 4</br><img src = "image4.jpg"/></a><a href = "image5.html">Name: Iamge 5</br><img src = "image5.jpg"/></a></div> <ul class="pager"> <li class="current">Page 1 of 50</li> <li class="next"><a href="catalogue/page-2.html" class="">next</a></li> </ul> </body>
</html>
"""response = HtmlResponse(url="http://www.example.com", body=body, encoding='utf-8')
/:描述一个从根开始的绝对路径
print(response.xpath('/html'))
print(response.xpath('/html/head'))
E1/E2: 选中E1子节点中的所有E2节点
print(response.xpath('/html/body/div/a')) #选中div子节点中的多有a 节点
//E: 选中文档中的所有E,无论在什么位置
print(response.xpath('//a')) #选中文档中的所有a
E1//E2: 选中E1后代节点中的所有E2节点,无论在后代中的什么位置
print(response.xpath('/html/body//img')) # 选中body后代中的所有img
E/text(): 选中E节点的文本
sel = response.xpath('//a/text()') # 选中所有a 的文本
print(sel)
print(sel.extract())
E/*: 选中E的所有元素子节点
print(response.xpath('/html/*')) # 选中html的所有子节点
print(response.xpath('/html/body/div//*')) # 选中div的所有后代元素节点
*/E: 选中孙节点中的所有E节点
print(response.xpath('//div/*/img'))
E/@ATTR : 选中E节点中的ATTR属性值
print(response.xpath('//img/@src')) # 选中img节点的src属性值
//@ATTR : 选中文档中所有ATTR属性
print(response.xpath('//@href')) # 选中所欲的href属性的值
E/@*: 选中E节点的所有属性值
print(response.xpath('//a[1]/img/@*')) # 获取第一个a下img的所有属性(这里只有src一个属性)
. : 选中当前节点,用来描述相对路径
sel2 = response.xpath('//a')[0] # 获取第一个a 的选择器对象
print(sel2)'''
假设我们想选中当前这个a 后代中的所有img,下面的做法是错误的,会找到文档中所有的img
因为//img是绝对路径,会从文档的根开始搜索,而不是从当前的a 开始
'''
print(sel2.xpath('//img')) #错误#需要使用.//img来描述当前节点后代中的所有img
print(sel2.xpath('.//img'))
. . : 选中当前节点的父节点,用来描述相对路径
print(response.xpath('//img/..')) # 选中所有img的父节点
node[谓语] : 谓语用来查找某个特定的节点或者包含某个特定值的节点
print(response.xpath('//a[3]')) # 选中多有a 中的第3个
print(response.xpath('//a[last()]'))
print(response.xpath('//a[position()<=3]'))# 选中所有含有id属性的div节点
print(response.xpath('//div[@id]'))# 选中所有含有id属性且值诶images的div
print(response.xpath('//div[@id="images"]'))
常用函数
string(arg): 返回参数的字符串值,包括子孙节点
text = '<a href = "#">Click here to go the<strong>Next Page</strong></a>'
selector = Selector(text=text)
# print(selector)# 以下做法得到相同结果
print(selector.xpath('/html/body/a/strong/text()').extract())
print(selector.xpath('string(/html/body/a/strong)').extract())# 如果想得到a 中的整个字符串‘Click here to go the Next Page’
# 使用text()就不行了,因为Click here to go the 和 Next Page在不同元素下
# 以下做法得到两个子串
print(selector.xpath('/html/body/a//text()').extract())
# 这种情况下可以使用string()函数
print(selector.xpath('string(/html/body/a)').extract())
contains(str1, str2): 判断str1中是否包含str2,返回布尔值
text2 = '''<div><p class="small info">hello world</p><p class="normal info">hello scrapy</p></div>
'''selector2 = Selector(text = text2)
print(selector2.xpath('//p[contains(@class, "small")]')) # 选择class属性中包含“small”的p元素
print(selector2.xpath('//p[contains(@class, "info")]')) # 选择class属性中包含“info”的p元素
Scrapy_XPath选择器相关推荐
- CSS 选择器:BeautifulSoup4解析器
和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会局部遍历,而Beautiful Soup 是基 ...
- xpath选择器简介及如何使用
xpath选择器简介及如何使用 一.总结 一句话总结:XPath 的全称是 XML Path Language,即 XML 路径语言,它是一种在结构化文档(比如 XML 和 HTML 文档)中定位信息 ...
- css选择器及float(浮动)
--------------------------选择器( css有就近原则)------------------------------- 选择器名称 在css表的 ...
- html5类选择器选择权重,Python Html5和CSS3的新增功能:CSS权重与CSS3新增选择器
一.CSS权重概念 CSS权重概念:指的是样式的优先级,有两条或多条样式作用于一个元素,权重高的那条样式对元素起作用,权重相同的,后写的样式会覆盖前面写的样式. 二.权重的等级 2.1.权重的等级划分 ...
- 浅谈对html css的理解,HTML+CSS入门 CSS选择器 、属性和值浅谈
body { font-size: 0.8em; color: navy; } 上面的意思是为body选择器设置font-size字体大小和color字体颜色. 所以基本的,当它作用与HTML页面时, ...
- php表单偶数变颜色,利用CSS3 nth-child()选择器 实现表格奇偶行变色
nth-child()简介 CSS3的nth-child() 选择器,我之前很少用,在做表格偶数行变色的时候,我通常在绑定的时候,做一个js判断,来加一个css,从而使表格偶数行和奇数行颜色不一样.这 ...
- FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)
目录 一.验证与门 二.验证与非门 三.验证二选一数据选择器 四.验证2-4译码器 五.验证半加器 六.验证全加器 0.初始化定义 1.第一个半加器 2.第二个半加器 3.得到最终进位Co 代码 0决 ...
- 【代码笔记】Web-CSS-CSS id和Class选择器
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 任务二:1、选择器 2、连接集中状态的顺序 3、浮动的用发和原理 4、盒模型在IE和Google等不同浏览器的区别与联系...
1.选择器类型 标签选择器,类选择器,ID选择器,组合选择器,伪类和伪元素,属性选择器,子选择器,同胞选择器, :not()选择器 1.同胞选择器 相邻同胞标签: h2 + p{ color:red; ...
最新文章
- 定义派生类拷贝构造函数
- mysql的count(*)的优化,获取千万级数据表的总行数
- Oracle osw监控工具的使用示例
- Windows2003如何安装IIS
- 关于CacheLookup一个有趣的问题
- .NET Core开发实战(第24课:文件提供程序:让你可以将文件放在任何地方)--学习笔记...
- python3调用c语言数组,使用Python中的ctypes访问数组
- LeetCode 764. 最大加号标志(DP)
- mysql 字符串搜_mysql – 在表中搜索字符串的SQL查询?
- tensorflow 模型可视化_基于tensorflow-2.x的yolov3实现
- 福大软工1816 · 第一次团队作业
- 专科计算机专业大学,计算机专业大学排名 专科生学计算机专业好吗
- Spark读写HBase(主要讲解SHC的使用)
- 骨龄测试软件app_测测app下载-工具包-测测下载v1.0.11 安卓版-西西软件下载
- 2021年阳江市高考成绩查询,阳江市召开2020年高考总结暨2021年新高考备考动员会...
- P1616 疯狂的采药+P1833 樱花+P1077 [NOIP2012 普及组] 摆花+P1064 [NOIP2006 提高组] 金明的预算方案
- sql server的缺陷 将截断字符串或二进制数据 哪个字段
- 【光模块单模和多模的区别及使用】
- VUE微信H5生成二维码海报保存在本地相册
- 《计算机网络》第三章课后答案第七版谢希仁