9.3 scrapy选择器的用法,css,xpath,正则。pyquery
2018-02-02 21:57
302 查看
scrapy至少有三种选择器,很大很多。理论上学会两种就够用了。
项目组都用一个选择器最好了。
一定要学会正则表达式。
第一种介绍CSS选择器
标签成对出现。
div,p不管div和p有什么关系,都搜索出来
div p 选择div下的所有p元素可以是父子关系也可以是爷孙关系等。
div>p 这个只能是父子关系。
还有一个函数 extract_first()切片,extract()切片脱壳
脱壳后
选择器返回的一般都是一个list,要记住,我们想要的都是结果文本
而li和a是父子关系。
示例:
p标签,li标签,a标签
单独抽离scrapy选择器
都是借用什么找到什么。如:借用class=‘top’这个属性找到li标签
此时做断点调试最合适。
辅助断点测试参考文章:
http://blog.csdn.net/lanchunhui/article/details/49514297
id唯一,class不唯一
012代表几个标签。
xpath写法
跟文件路径很像,默认第一层/html,单斜杠就是一层
双斜杠是搜索的意思,跟css什么都不带一样
文本和属性,属性是class=‘top’,文本是li的div用text()
下图是属性写法
Xpath的使用方法
寻找可以匹配 xpath query 的节点,并返回 SelectorList 的一个实例结果,单一化其所有 元素。列表元素也实现了 Selector 的接口。query 是包含XPATH查询请求的字符串
该方法可以通过 response.xpath() 调用
选取节点
Xpath 使用路径表达式在 XML文档中选取节点。节点是通过沿着路径或者step来选取的。
下面列出了最有用的路径表达式:
Xpath选择器使用示例:
Xpath选择方法之前在入门课程第四课已学习过了,仍然使用上面的例子:
查找ul标签下的li元素:
>>>sel.xpath(‘/html/body/ul/li’)
#可见其返回了一个SelectorList实例
查找所有的li标签:
>>>sel.xpath(‘//li’)
#可见其返回了一个SelectorList实例
查找第三个li标签下的第一个p标签:
>>>sel.xpath(‘//li’)[2].xpath(‘./p’)[0]
#可见其返回了一个SelectorList实例
同样可以调用.extract()方法提取数据:
查找a标签下的div标签的文本:
>>>sel.xpath(‘/html/body/ul/li/a/div/text()’).extract_first()
RE的使用方法
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE)它通常被用来检索、替换那些符合某个模式(规则)的文本。
常用元字符:
匹配神器:
(.*)具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。
(.*?)则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。
pyquery的使用方法
pyquery可以让你使用类似jQuery语法来对xml进行操作,pyquery语法尽可能跟jQuery语法相似 ,类似于css
pyquery使用lxml库对xml和html进行快速的处理
pyquery这个库目前还不是一个可以跟JavaScript代码交互的库
兼容性好,不用各种脱壳
建议平时用pyquery
提文本,提属性
pyquery选择器使用示例:
打开同级目录下的HTML文件,所获取的jpy变量是PyQuery,可以直接使用jpy对其进行选择:
from pyquery import PyQuery
with
open('test.html'
, encoding='utf-8')
as f:
text
= f.read()
jpy = PyQuery(text)
pass
查找class=‘top’的元素的文本:
>>>jpy(‘.top’).text()
查找class=‘top’的元素的class属性:
>>>jpy(‘.top’).attr(‘class’)
查找li标签下所有的文本,遍历时候必须加items函数
>>>items = jpy(‘li’)
>>>for i in items.items():
>>>···· print(i.text())
li的div
li的div的div
li的p
li的a的div
查找li标签下所有的class属性
>>>items = jpy(‘li’)
>>>for i in items.items():
>>>···· print(i.attr(‘class’))
top
top
None
None
项目组都用一个选择器最好了。
一定要学会正则表达式。
第一种介绍CSS选择器
标签成对出现。
div,p不管div和p有什么关系,都搜索出来
div p 选择div下的所有p元素可以是父子关系也可以是爷孙关系等。
div>p 这个只能是父子关系。
还有一个函数 extract_first()切片,extract()切片脱壳
脱壳后
选择器返回的一般都是一个list,要记住,我们想要的都是结果文本
而li和a是父子关系。
示例:
p标签,li标签,a标签
单独抽离scrapy选择器
都是借用什么找到什么。如:借用class=‘top’这个属性找到li标签
此时做断点调试最合适。
辅助断点测试参考文章:
http://blog.csdn.net/lanchunhui/article/details/49514297
id唯一,class不唯一
012代表几个标签。
xpath写法
跟文件路径很像,默认第一层/html,单斜杠就是一层
双斜杠是搜索的意思,跟css什么都不带一样
文本和属性,属性是class=‘top’,文本是li的div用text()
下图是属性写法
Xpath的使用方法
寻找可以匹配 xpath query 的节点,并返回 SelectorList 的一个实例结果,单一化其所有 元素。列表元素也实现了 Selector 的接口。query 是包含XPATH查询请求的字符串
该方法可以通过 response.xpath() 调用
选取节点
Xpath 使用路径表达式在 XML文档中选取节点。节点是通过沿着路径或者step来选取的。
下面列出了最有用的路径表达式:
Xpath选择器使用示例:
Xpath选择方法之前在入门课程第四课已学习过了,仍然使用上面的例子:
查找ul标签下的li元素:
>>>sel.xpath(‘/html/body/ul/li’)
#可见其返回了一个SelectorList实例
查找所有的li标签:
>>>sel.xpath(‘//li’)
#可见其返回了一个SelectorList实例
查找第三个li标签下的第一个p标签:
>>>sel.xpath(‘//li’)[2].xpath(‘./p’)[0]
#可见其返回了一个SelectorList实例
同样可以调用.extract()方法提取数据:
查找a标签下的div标签的文本:
>>>sel.xpath(‘/html/body/ul/li/a/div/text()’).extract_first()
RE的使用方法
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE)它通常被用来检索、替换那些符合某个模式(规则)的文本。
常用元字符:
匹配神器:
(.*)具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。
(.*?)则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。
pyquery的使用方法
pyquery可以让你使用类似jQuery语法来对xml进行操作,pyquery语法尽可能跟jQuery语法相似 ,类似于css
pyquery使用lxml库对xml和html进行快速的处理
pyquery这个库目前还不是一个可以跟JavaScript代码交互的库
兼容性好,不用各种脱壳
建议平时用pyquery
提文本,提属性
pyquery选择器使用示例:
打开同级目录下的HTML文件,所获取的jpy变量是PyQuery,可以直接使用jpy对其进行选择:
from pyquery import PyQuery
with
open('test.html'
, encoding='utf-8')
as f:
text
= f.read()
jpy = PyQuery(text)
pass
查找class=‘top’的元素的文本:
>>>jpy(‘.top’).text()
查找class=‘top’的元素的class属性:
>>>jpy(‘.top’).attr(‘class’)
查找li标签下所有的文本,遍历时候必须加items函数
>>>items = jpy(‘li’)
>>>for i in items.items():
>>>···· print(i.text())
li的div
li的div的div
li的p
li的a的div
查找li标签下所有的class属性
>>>items = jpy(‘li’)
>>>for i in items.items():
>>>···· print(i.attr(‘class’))
top
top
None
None
相关文章推荐
- scrapy简单入门及选择器(xpath\css)
- CSS中:before和:after选择器的用法
- CSS中的ID选择器和类选择器区别及用法
- 【Scrapy】 selector 学习记录一(xpath、css)
- Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法
- CSS的四种设置方法以及CSS各种选择器的用法
- css:nth-of-type()选择器用法
- 牢记 31 种 CSS 选择器用法
- 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签
- css 选择器中的正则表达式
- CSS中的id选择器和类选择器的用法
- css的嵌套选择器用法总结
- css中 :not() 选择器的用法
- python scrapy css 选择器
- Scrapy: 为什么xpath和css明明是对的,但却爬不到任何内容?
- Scrapy-xpath用法以及实例
- 【选择器小结】正则表达式、XPath选择器、CSS选择器小结和使用场景
- CSS 引入方式及选择器的用法 的初体验
- CSS/Xpath 选择器 第几个子节点/父节点/兄弟节点
- 牢记 31 种 CSS 选择器用法