xpath简单讲解

想必玩过爬虫的都知道xpath的重要性与便捷性,会的就请绕道吧,毕竟我也是菜鸟,菜鸟文章毕竟只是给新手看的,嘻嘻

用途

在爬虫中,当你获取到整个网页的源代码之后,怎么做才能具体的得到你想去爬的东西呢
这个时候,正则也可以,bs4也可以,但是me最喜欢的就是xpath了,简洁明了,清晰易懂
好了,先看一个xpath
在这里插入图片描述
这两行的括号中的引号中便都是xpath的语句了,现在看当然会有点迷糊,但是一会儿就觉得很简单了
首先,xpath是根据你要爬取的网页的html构造来一级一级的找标签解析并确定出最后你想要的那个文本、那个属性的
在你的一整个html结构中,最根的,头的肯定就是标签了,但是,如果从html开始一级一级的往下直至找到你最后确定的那个标签的话,简直太多了所以这时候 // 就出现了
一个 / 代表这直系亲属,就是它的下一级,子级标签
好比说有个这么个结构
在这里插入图片描述
那么一个 / 只能找到class为b的div,找不到class为c的div或者是更里面的div
两个 / 代表的是多级关系,中间可以有好几层的标签可以省略
还是用上面这个结构的话,那么两个 / 就可以找到class为c的div或者是更里面的标签了,但是相反,他不会看到class为b的div,因为它不会去找它的直接子级,而是去找更里面的
所以上面的xpath语句的开头//div就是直接跳过html标签和body标签直接去更深的层级去找div

那么往后讲这个[@class=“solist”]这个结构
以为一个body体里大多数不只有一个div标签或者是p标签,a标签等等,所以这个时候要去确定一个,或者是多个想要的div标签,那怎么办呢,写过html的都知道,每个标签都可以有class或者id这个属性。那么这时候正好通过找这样的一个你想去要的属性来确定你最后可以拿到你想要的那个div或者是p标签
div[@class=“a”]的意思就是找到class为a的div标签
还有一种蕾丝sql模糊查询的东西div[starts-with(@class,‘a’)]这样就是找class是以a开头的div了
还有这种div[contains(@class,‘a’)] 这样就是找class包含a的div

这里还有一种不通过这种确定class或者id确认的方式,那就是通过数数的方式
好比说还是和原来差不多的结构
在这里插入图片描述
这个,当你//div[@class=“b”]了之后
你想要确定class为d的div标签 但是不想通过确定class了,怎么办呢
这样//div[@class=“b”]/div[2]
这样就是说,在你class为b的子代标签中第二个div,在这不是从0开始数,这儿是从1开始数的,所以[2]就是第二个div,也就是class为d的div

好,然后再来通过一级一级的确定或者是多级的确定之后,最后到你想要的img标签或者是p标签了之后,那么怎么拿到你想要的属性或者是文本呢,很简单
确定最后标签是p 想要p标签中间的文本 …/p/text() 这样就可以拿到p标签中间的文本了
想要属性: …/img/@src 这样就拿到想要的属性了

这儿是简单的讲解xpath语法,那么我们一般都选择从哪开始写呢
先确定好你想要爬去的内容,想我这样,把鼠标放到你先要爬去的内容上,文本也好,图片也好,我先举个图片的例子,不要点左键,点右键,看到一个检查没,一般都会有哈点击检查
在这里插入图片描述
在这里插入图片描述
这个时候,发现是不有段代码被选中了已经,这就是你鼠标的位置
然后看见标签前面的小箭头了没 现在是展开的,点一下,给它合上
然后,一直点,直到 你看见一排排全是一样的代码之后
在这里插入图片描述
差不多是这样,如果
在这一样的标签上它们有class或者id的话,你们就可以直接 在开头的//后写从这个标签开始确定了
但是这个没有那就从它的上一级找,也就是他爸
在这里插入图片描述
也就是这个class是snack_wrap fixed的div了
所以,从它开始往下找,一级一级的找,最后我想要图片,所以我得xpath就是这样了
//div[@class=’‘snack_wrap fixed"]//li//img/@src
这样了
我这个网站是一个零食网 http://www.lingshi.com/
这个网站发现这样最后是空的,怎么回事呢,通过检查源代码,或者是
print(request.urlopen(req).read().decode(“gbk”))
之后,我发现它的img标签里面写图片路径的是src2 并不是src 所以,这个时候小小的改动为
//div[@class=’'snack_wrap fixed"]//li//img/@src2
就好了
真实爬虫中,你会遇到很多各种各样的反爬,这个时候,可要多加小心咯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值