xpath和css选择器重点知识小总结

先上些干火:

今天使用scrapy写爬虫 碰到一个有意思的问题 也是出现 [ ] 对 就是出现了这种空格 虽坑了我 不过也发现了一个xpath新用法(也可能是我之前没发现)。

xpath规则 : //*[@class="c_feature"]/li[4]/a/@href 爬去到的结果应该是:['http://www.cfca.com.cn']

但是有些网站则是: //*[@class="c_feature"]/li[5]/a/@href

所以有些结果也会爬取到 []

测试了一下 //*[@class="c_feature"]/li[4 or 5]/a/@href 这样也可以使用 也解决了问题

声明://*[@class="c_feature"]/li[4 | 5]/a/@href 是去 4 和 5 的资源的意思

 

下面xpath知识小结:

三把斧

一。 /  表示取子 【即挨着的那个

 

比如<div >

<a > xxxxx

<img>M</>

< /a>

</div>

div/a 正确 div/img 错误

 

二。 // 表示取后代

//div 表示取所有div的子元素

 

三。 @ 取属性

//a[@href="ssss"] 表示取拥有取属性href为ssss的 a 元素

//a/@href 表示取属性 即如果此时的href ="ssss" 那么取得就是ssss

此外 取标签内文本的方式是:

<span>你好!</span>

.../span/text() 即可取得

 

//a/@href 表示取属性 即如

 

 

 

/article/div[1] 选取属于article子元素的第一个div元素

//div[@class="lang"] 选取所有class属性为 lang 的div元素

/div/* 选取div的所有子元素

下面css选择器知识小结:

刚开始总感觉css挺麻烦的 后面会用了 才知道 自己差点又错过一个好东西 css 真的大多时候比xpath要简洁

同样css 三把斧

一。* 选取所有节点

 

二。 #container    #表示取id 取id为container的节点

 

三。 .container   . 表示取类class 取class为container的节点

 

 

 

li a 中间空格 表示取 li 下的所有 a 元素

ul+p 选取ul后面的第一个p元素

div#cntainer>ul 表示 选取id为container的div 的第一个ul子元素

ul~p 选取与ul相邻的所有p元素

a[title] 选取所有有title属性的a元素

a[href="https://www.abc.com"] 选取所有属性为https://www.abc.com的a的元素

a[href*="jobble"] 选取所有href 属性包含jobble的a 元素

a[href^="https"] 选取所有以https开头的a元素

a[href$=".jpg"] 选取所有以.jpg结尾的a元素

input[type=radio]:checked 选取选中的radio元素

 

div:not(#container) 选取所有id 非 container 的 div属性

li:nth-child(2) 选取第3个li元素

 

举个栗子:

response.css(".entry-header .tt2 h1::text") 取entry-header类下的 tt2类 下的 h1标签内的文本内容

response.css(".entry-header a::attr(href)") 取entry-header类下的 a标签中href属性内容 【取网址】

 

 

css和xpath两个选择器的

都会容易落掉

css(".job") “ . ” 很重要

xpath("//div") " // " 很重要

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值