xpath学习笔记

目录

 入门知识

节点

xpath解析

安装库

加载xml

xpath查找节点

text()返回节点文本

隔行拿(递归)//

*通配符任意的目录

根据索引 相同标签取第几个

根据属性和属性值找[@属性=’属性值‘]

./相对查找(路径)

查找属性值@属性"

确定网页显示  对应源代码位置   检查快捷拿xpath代码

 实例:猪八网

区别html

思路

找一大块与一小块分界

join函数

实操

步骤

 名字出现,分割的解决

 代码


 入门知识

xpath是在XML文档中搜索内容的一门语言(html是xml的一个子集)

通过节点之间的关系查找数据

节点

6a3a6b0220024684805c2460852a5aea.png

book id 等都是节点  book是id name父节点   name是 book字节  id book 等是兄弟节点

xpath解析

安装库

from lxml import etree

加载xml

tree=etree.XML(xml内容)

etree.HTML     etree.parse(文件)

1b3736fdd109459fb9a0bf0a93a68896.png

xpath查找节点

res=tree.xpath("/book/name")

找book下name节点

text()返回节点文本

res=tree.xpath("/book/name/text()")#拿文本

多个标签(节点相同)      res是所有文本

隔行拿(递归)//

4037e0aa98f44d0389405bbf5187a428.png

想一次拿到周...... 和下面的热热热

res=tree.xpath("/book/author//nick/text()")

递归拿author 目录下所有  的nick(子 孙 )

*通配符任意的目录

只拿热1和热2

res=tree.xpath("/book/author/*/nick/text()")

*是任意的 

根据索引 相同标签取第几个

7be276f99a0441e1aa1824dbf270e666.png

res=tree.xpath("/html/body/ul/li[1]/text()")

xpath索引从1开始

根据属性和属性值找[@属性=’属性值‘]

4c4a3013f604452ca0ea1a96ea2d5453.png

tree.xpath('/ol/li/a[@href='dapao']/text())

 一行多个标签  前面的标签在前写 也可以只写第一个标签然后text

./相对查找(路径)

如上假设     aa是查找的三个li(标签)

.是i的路径

for i in aa: 再次查找必须

aa.xpath('./')

查找属性值@属性"

aa.xpath('./a/@href')

 拿标签a属性的值

多行标签相同 拿多行

确定网页显示  对应源代码位置   检查快捷拿xpath代码

94a8d0d4149d4696aea64714982b707e.png

是上面的  没有all

 检查  点击左上角箭头  再在页面上试试

8758473855df41e3b62711224c25a7cd.png

 复制

ec265bca40934aacbbb97b9906325bae.png

 实例:猪八网

区别html

html与xml不能混用 源代码开头会有

6aec927b275e45849310af926ce34e81.png

思路

 5b2ea068f2394c1fbaf5a43332526c85.png

 只需用上文快捷拿该块的(检查)

找一大块与一小块分界

指上面一大块  下面一小块

再删掉切片

join函数

’sep‘.jion(text)

以sep为分隔符 拼接text中的元素

实操

.xpath()里最好不要有(//*[@id="__layout"]/div/div[3]/div/div[3]/div[4]/div[1]/div[1])

像这样id  

步骤

鼠标图标定位到这一块 

ba14edd16cdb451999c120f5f1c80cd2.png

再找到一小块与一大块分界处

9c8010fcd26746eabc7c0c3dbd0674eb.png

 复制这个xpath    xpath一下  去掉索引(取每一块)

然后for循环     xpath  ./    展开一个个找(copy all xpath删前面的快速找)(自己输入路径)注意输入路径时的[9]索引 如第几个div

03bd36d6d640488da6c4111fb8722382.png

 名字出现,分割的解决

我们在网站上搜索的是saas(里)

则输出的标题中无法saas  会用,代替

750a90175b394f6ead268cd54573164c.png

 代码

import requestsfrom lxml import etreeurl='https://langfang.zbj.com/search/service/?kw=saas&r=1'#获取页面reps=requests.get(url)tree=etree.HTML(reps.text)yikuai=tree.xpath('//*[@id="__layout"]/div/div[3]/div/div[3]/div[4]/div[1]/div')#找一块for i in yikuai:    titlb=i.xpath('./a/div[2]/div[1]/div/text()')#找的时候可以直接 copy all xpath!!!!!    price=i.xpath('./div[3]/div[1]/span/text()')#注意索引!!!!重要    nier=i.xpath('./div[3]/a/text()')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值