Python网络爬虫 二、Xpath语法详解

Python网络爬虫

二、Xpath语法详解

lxml是一个网页解析库。Xpath是一门在XML文档中查找信息的语言。Xpath课 用来在XML文档中对元素和属性进行遍历。

安装

pip install lxml

导入

import requests
from lxml import etree

创建一个简单的html样本,注意其特点,层层嵌套。

htm = '''
<html>
    <div>
        <ul>
            <li class = "item-0"><a href="link1.html">first item</a></li>
            <li class = "item-1"><a href="link2.html">second item</a></li>
            <li class = "item-inactive"><a href="link3.html">thrid item</a></li>
            <li class = "item-1"><a href="link4.html">fourth item</a></li>
            <li class = "item-0"><a href="link5.html">fifth item</a></li>
            <li class = "else_1">something_else</li>
                this is ui item
        </ul>
    </div>
</html>
'''

selector = etree.HTML(htm)#初始化etree

在这里补充下Xpath的常用规则
在这里插入图片描述

#查找所有的li
all_li = selector.xpath('//div/ul/li')

在这里插入图片描述

#查找第一个li
li_1 = selector.xpath('//div/ul/li[1]')

注意这里的索引是从1开始,而非从零开始。
在这里插入图片描述
与上图比较,可以发现即为第一个li。

#提取第一个li下的a这个标签下的文本(first item)
li_text = selector.xpath('//div/ul/li[1]/a/text()')

注意这里只有一个a,因此不需要设置序号。
使用text()提取文本,另外,注意这里提取之后是一个列表,因此,可以通过索引取出该文本。
在这里插入图片描述
在这里插入图片描述
除此之外,还可以通过特定的属性进行查找。

#通过属性查找第三列的文本
li_3 = selector.xpath('//div/ul/li[@class = "item-inactive"]/a/text()')

在这里插入图片描述
除此之外,如果该属性是独一无二的,则可以直接查找。

li_3 = selector.xpath('//li[@class = "item-inactive"]/a/text()')
#i_3 = selector.xpath('//*[@class = "item-inactive"]/a/text()'),*代表查找所有。

在这里插入图片描述

#通过href查找Li2的文本
li_2 = selector.xpath('//a[@href = "link2.html"]/text()')[0]

在这里插入图片描述

#提取href属性
c1 = selector.xpath('//li[1]/a/@href')

在这里插入图片描述

#获取所有的class
all_c = selector.xpath('//li/@class')

在这里插入图片描述

Xpath的一些高级用法

start_with(谁,干什么)

#提出属性为‘item-’开头的li
all_c = selector.xpath("//li[starts-with(@class,'item-')]")
#提取出all_c中的文本,注意此时all_c为list
all_a = []
for c in all_c:
    all_a.append(c.xpath('a/text()')[0])

在这里插入图片描述

#也可以直接提取
all_a = selector.xpath("//li[starts-with(@class,'item-')]/a/text()")

string:提取出所有的文本

#提取所有文本
all_text = selector.xpath('string(//ul)')

在这里插入图片描述

一个小实例

爬取百度首页

bd = requests.get("https://www.baidu.com/")#获取网页
bd.encoding = 'utf-8'#选择解码方式
html = etree.HTML(bd.text)#进行初始化,将bd变成文本的形式
num = html.xpath('//*[@id="u1"]/a[1]/text()')[0]

在这里插入图片描述

h1 = html.xpath('//*[@id="u1"]/a[1]/@herf')[0]

在这里插入图片描述

#获取百度首页的图片
h2 = html.xpath('//*[@id="lg"]/img/@src')[0]

在这里插入图片描述

h3 = 'http:'+h2#补充完整
t = requests.get(h3)#图片的网址
with open('baidu.jpg','wb') as f:
    f.write(t.content)#保以二进制写的形式打开二进制文件,保存图片

在这里插入图片描述

获取xpath的方法

进入网站,按下F12,按下Ctrl+Shif+C,将鼠标指向想要的数据位置,如图
在这里插入图片描述
在蓝色处,单击右键,选择copy,选择copy xpath。使用的浏览器为chrome,同时推荐下载xpath helper 插件。安装时会遇见一些问题,将下载好的.crx文件改成.rar文件,之后进行解压,再在chrome的扩展程序中进行打开。

Xpath helper 使用效果

在这里插入图片描述
使用方法:按下Ctr + Shift + X打开控制台,按下Ctr + Shift进行选取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanzoe_lwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值