您好,欢迎来到微智科技网。
搜索
您的当前位置:首页9.3 scrapy选择器的用法,css,xpath,正则。pyquery

9.3 scrapy选择器的用法,css,xpath,正则。pyquery

来源:微智科技网
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标签

此时做断点调试最合适。
辅助断点测试参考文章:



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元素
#可见其返回了一个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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务