Scrapy: xpath与css选择器

本文详细介绍了Scrapy中如何使用XPath和CSS选择器进行网页元素选取。讲解了基本语法,包括子元素、后代元素、谓语语法和其他特殊语法。还探讨了Scrapy选择器的实战应用,如在Scrapy shell中使用response.xpath()和response.css()方法,以及如何结合正则表达式提取数据。最后,提到了选择器的嵌套和.re()方法的使用。
摘要由CSDN通过智能技术生成
CSS 选择器
表达式 说明
* 所有节点
#ElementId ID为ElementId的节点
.clsName class为clsName的节点
li a li元素下所有a元素
ul + p ul下第一个P元素
div#eId > ul id为eId的元素下所有ul元素
div.clsName clsss为clsName的div元素
ul ~ p 与ul相邻的所有p元素
a[title] 所有有tittle属性的a元素
a[href=“http://www.baidu.com”] 所有href为指定值的a元素
a[href*=“job”] 所有href属性包含指定值的a元素
a[href^=“http”] 所有href属性值以指定值开头的a元素
a[href$=".jpg"] 素有href属性值以指定值结尾的a元素
input[type=radio]:checked 状态为选中的radio元素
div:not(#eleId) 所有id不是指定值的div元素
li:nth-child(3) 第三个li元素
tr:nth-child(2n) 第偶数个 tr 元素
xpath 选择器

xpath是使用路径在xml和html中进行导航的。

基本语法:
  • 子元素: 仅指节点下面的第一层元素
  • 后代元素:指节点下任意层级的元素
  • 父元素、祖先元素同理
表达式 说明
div 选取所有div元素的所有子元素
/div 选取根元素div
div/a 素有属于div的子元素的a元素
//div 所有div元素
div//span 所有属于div元素的后代span元素,无论在那个层级
//@class 选取所有名为class的属性
谓语语法

谓语用来查找某个特定的节点或者包含某个指定的值的节点,谓语百放在方括号中。

表达式 说明
/div/p[1] 属于div子元素的第一个p元素
/div/p[last()] 属于div子元素的最后一个p元素
/div/p[last()-1] 属于div子元素的倒数第二个p元素
/div[@lang] 所有有lang属性的div元素
//div[@lang=‘eng’] 所有lang属性为eng的div元素
.//header//span[contains(@class,‘main-title-rating’)]/@title .符号表示当前路径,一般在循环中使用;contains中表示class中包含指定值元素,@title是取元素的title属性
其他语法
  • ‘*’ :匹配任意元素
  • ‘@*’:匹配任意属性元素
  • ‘node()’:匹配任意类型的元素

例如:

  1. /div/*:属于div元素的所有子节点
  2. //*:所有元素
  3. //div[@*]:所有带属性的div元素
  4. /div/a | //div/p:所有div元素的a和p元素
  5. //span | //ul:所有span和ul元素
  6. article/div/p //span:所有属于article元素的div元素的p元素以及所有span元素
scrapy选择器实战

Scrapy选择器构建于 lxml 库之上,这意味着它们在速度和解析准确性上非常相似。
我们将使用 Scrapy shell
(提供交互测试)和位于Scrapy文档服务器的一个样例页面,来解释如何使用选择器:
http://doc.scrapy.org/en/latest/_static/selectors-sample1.html

这里是它的HTML源码:

<html>
 <head>
  <base href='http://example.com/' />
  <title>Example website</title>
 </head>
 <body&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值