python中xpath用法_python3中xpath的使用快速入门

python中使用xpath的场景

我们一般是在爬虫中会用到xpath对网页源代码进行信息的筛选与提取,具体而言,主要筛选的信息有以下几种:

1,某个标签中文本的获取

eg:

my love 中my love的获取

2,某个标签中属性的获取

eg:

my love 中class属性的获取

html文档结构的分析

整个网页其实可以看作是一个大方块套着各式各样的小方块,每个方块中可以嵌入文字,图片等东西。

以bing搜索网页为例,如下图:

最大的一个网页的方块,

其中又有搜索框方块、页眉方块、

而搜索框方块中又包含了一个搜索图标的方块。

在html(超文本标记语言)中,这些方块就用标签来表示,

而方块的包含关系,也就形成了标签的包含关系(父子关系),并列关系(兄弟关系)。

每个方块又要指定固定的自己的样式,于是就有各种属性被包含在标签中。

a book

The truth about elk.

  1. An elk is a smart #标签中的额外东西为属性 如 class="a"

    starfish

  2. ...and cunning animal!

如以上html文档可以转换成以下dom树

代码操作

利用lxml可以将标签关系变成一个树的形式,来体现标签的关系以便查找

所以先导入模块:

from lxml import html

将网页源代码解析成树的dom树的形式:

tree=html.fromstring(r_text) #r_text为requests请求后的网页源代码

之后我们便是对dom树利用xpath语法进行我们所需要搜索的节点

tree.xpath('xpath') #xpath为所写的xpath路径

xpath最常用的讲解

最开始的目的中讲了我们的目的是获得一个节点中的文本或者是属性,所以我们的问题有两个:如何定位我们所要找的节点

找到节点后如何获取属性和文本如何定位我们所要找的节点

//li #选取所有的li节点

# ‘//’为选取所有的操作符

//li[0] #选取所有的li节点中的第一个节点

//li[@class="a"] #选取所有带有属性class=“a”的li节点

//li[@class="a"] /span #选取所有带有属性class=“a”的li节点下的span节点找到节点后如何获取属性和文本

//li[0]/@class

#选取所有的li节点中的第一个节点并获得其class属性的值

#‘/@’为获取其属性操作符

//li[@class="a"] /span/text()

#选取所有带有属性class=“a”的li节点下的span节点,并获取其中的文本

# ‘/text()’为获取文本的操作符

骚操作大法

但其实我们在实际操中使用的最广泛的方法为点击f12查看网页源代码

点击该箭头(元素选择器)

在网页中找到我们所需要搜索的元素并点击

此时源代码展示处会自动定位到我们所选的标签处

copy其xpath并 进行适当修正后进行操作

(不稍稍修正可能达不到你的目的呦)(但其实有时候特征很明显的时候自己写反而会更简单)

实战 爬取豆瓣电影top250第一页电影的引言

代码如下很easy:

import requests

from lxml import html

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}

url = 'https://movie.douban.com/top250'

r = requests.get(url, headers=headers)

tree = html.fromstring(r.text)

# copy的xpath

# quotes_a=[]

# quotes_a.append(tree.xpath('//*[@id="content"]/div/div[1]/ol//li/div/div[2]/div[2]/p[2]/span/text()'))

# print(quotes_a)

# 自己写的xpath

quotes_b = [] #创建引言的列表

quotes_b.append(tree.xpath('//span[@class="inq"]/text()'))

print(quotes_b)

更深入的学习

此文章为本人的学习笔记,大家有问题欢迎评论和私信,共同学习进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值