博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法
阅读量:6947 次
发布时间:2019-06-27

本文共 4126 字,大约阅读时间需要 13 分钟。

Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分

Xpath是专门在XML文件中选择节点的语言,也可以用在HTML上。
CSS是一门将HTML文档样式化语言,选择器由它定义,并与特定的HTML元素的样式相关联。

XPath选择器

常用的路径表达式,这里列举了一些常用的,XPath的功能非常强大,内含超过100个的内建函数。

下面为常用的方法

nodeName    选取此节点的所有节点/           从根节点选取//          从匹配选择的当前节点选择文档中的节点,不考虑它们的位置.           选择当前节点..          选取当前节点的父节点@           选取属性*           匹配任何元素节点@*          匹配任何属性节点Node()      匹配任何类型的节点

CSS选择器

CSS层叠样式表,语法由两个主要部分组成:选择器,一条或多条声明

Selector {declaration1;declaration2;……}

下面为常用的使用方法

.class              .color              选择class=”color”的所有元素#id                 #info               选择id=”info”的所有元素*                   *                   选择所有元素element             p                   选择所有的p元素element,element     div,p               选择所有div元素和所有p元素element element     div p               选择div标签内部的所有p元素[attribute]         [target]            选择带有targe属性的所有元素[arrtibute=value]   [target=_blank]     选择target=”_blank”的所有元素

选择器的使用例子

上面我们列举了两种选择器的常用方法,下面通过scrapy帮助文档提供的一个地址来做演示

地址:
这个地址的网页源码为:

我们通过scrapy shell 

获取title

这里的extract_first()就可以获取title标签的文本内容,因为我们第一个通过xpath返回的结果是一个列表,所以我们通过extract()之后返回的也是一个列表,而extract_first()可以直接返回第一个值,extract_first()有一个参数default,例如:extract_first(default="")表示如果匹配不到返回一个空

In [1]: response.xpath('//title/text()')Out[1]: [
]In [2]: response.xpath('//title/text()').extract_first()Out[2]: 'Example website'In [6]: response.xpath('//title/text()').extract()Out[6]: ['Example website']

同样的我们也可以通过css选择器获取,例子如下:

In [7]: response.css('title::text')Out[7]: [
]In [8]: response.css('title::text').extract_first()Out[8]: 'Example website'

查找图片信息

这里通过xpath和css结合使用获取图片的src地址:

In [13]: response.xpath('//div[@id="images"]').css('img')Out[13]: [
,
,
,
,
]In [14]: response.xpath('//div[@id="images"]').css('img::attr(src)').extract()Out[14]: ['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg', 'image5_thumb.jpg']

查找a标签信息

这里分别通过xapth和css选择器获取a标签的href内容,以及文本信息,css获取属性信息是通过attr,xpath是通过@属性名

In [15]: response.xpath('//a/@href')Out[15]: [
,
,
,
,
]In [16]: response.xpath('//a/@href').extract()Out[16]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']In [17]: response.css('a::attr(href)')Out[17]: [
,
,
,
,
]In [18]: response.css('a::attr(href)').extract()Out[18]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']In [27]: response.css('a::text').extract()Out[27]: ['Name: My image 1 ', 'Name: My image 2 ', 'Name: My image 3 ', 'Name: My image 4 ', 'Name: My image 5 ']In [28]: response.xpath('//a/text()').extract()Out[28]: ['Name: My image 1 ', 'Name: My image 2 ', 'Name: My image 3 ', 'Name: My image 4 ', 'Name: My image 5 ']In [29]:

高级用法

查找属性名称包含img的所有的超链接,通过contains实现

In [36]: response.xpath('//a[contains(@href,"image")]/@href').extract()Out[36]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']In [37]: response.css('a[href*=image]::attr(href)').extract()Out[37]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']In [38]:

查找img的src属性

In [41]: response.xpath('//a[contains(@href,"image")]/img/@src').extract()Out[41]: ['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg', 'image5_thumb.jpg']In [42]: response.css('a[href*=image] img::attr(src)').extract()Out[42]: ['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg', 'image5_thumb.jpg']In [43]:

提取a标签的文本中name后面的内容,这里提供了正则的方法re和re_first

In [43]: response.css('a::text').re('Name\:(.*)')Out[43]: [' My image 1 ', ' My image 2 ', ' My image 3 ', ' My image 4 ', ' My image 5 ']In [44]: response.css('a::text').re_first('Name\:(.*)')Out[44]: ' My image 1 '

 

转载地址:http://lrhnl.baihongyu.com/

你可能感兴趣的文章
App 是否真的能检测手机壳颜色?
查看>>
学Hadoop还是Spark好?
查看>>
微服务生命周期的9个任务事项
查看>>
实战Kafka ACL机制
查看>>
云监控服务使用教程
查看>>
“旧城改造”的背后——银泰新零售阿里云解决方案(上)
查看>>
java B2B2C源码电子商务平台 -SpringCloud服务相互调用RestTemplate
查看>>
java B2B2C Springcloud电子商务平台源码-zuul 过滤器机制
查看>>
分布式消息系统:Kafka
查看>>
我的友情链接
查看>>
H3C防火墙路由器做回流
查看>>
Tableau10.5视频课程之常见图形制作
查看>>
Kettle5.4实战项目培训课程
查看>>
获取局域网里一个MAC地址对于的IP地址
查看>>
让phpmailer支持中文名称的附件和邮件标题中文乱码(转)
查看>>
JavaScript强化教程——JavaScript Math(算数) 对象
查看>>
CentOS7部署Kubernetes集群
查看>>
struts2中使用DMI(动态调用方法)方式配置action
查看>>
使用hyperpacer实现AWR报告的同步收集
查看>>
关于os.popen你可能不知道的
查看>>