数据提取之XPATH

#2.数据提取

#XPath语法和 lxml模块
Xpath是一门在XML和HTML文档中查找信息的语言
原本设计适用于XML的,但XML和HTML两者的语法极为相似,所以也可以使用HTML

谷歌浏览器下是XPATH
火狐浏览器下是TRY XPATH
360浏览器下也兼容XPATH,使用时需要打开开发者模式

#XPATH语法
name 选取name下所有子节点
/ 指定路径,获取子节点
// 所有路径,获取子孙节点
@ 选取节点属性

谓词 放在[]中的内容,用于查找某个特定值的节点

例如:
div[1] 第一个子元素
div[last()] 最后一个子元素
div[position() < 3] 选取节点顺序小于3三的节点,也就是前两个节点
//div[@price] 因为属性没有设置返回,所以是选取所有拥有price属性的节点
//div[@price=10] 选取所有price属性等于10的div节点

通配符

  • 匹配任意节点
    @* 匹配节点中的任意属性

运算符
| 可以选取多个路径 /a | //b 返回a路径和所有b路径下的节点集

      • div 加减乘除
        = != < <= > >= 条件运算符
        or and mod 逻辑运算符

注意谓词下标是从1开始的。

#lxml库
lxml和正则一样,也是用C语言实现的,是一款HTML/XML解析器,可以通过之前的XPath语法,来快速定位特定元素以及节点信息

安装 pip install lxml
官方文档:http://lxml.de/index.html

安装,注意,我的版本是3.8,所以下载3.8的版本 pip3.8 install lxml

from lxml import etree

text = """
<p class="text">周深惊艳了青春的时光<br>深深却温柔了我的岁月<br>――来自一个生米入坑的感言</p>
"""
#将字符串转换成一个Element对象,可以窒息感XPATH语法,此时不是HTML文本
html = etree.HTML(text)
#打印数据类型,可以查看
print(type(html))
print(etree.tostring(html, encoding = 'utf-8').decode('utf-8'))

字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)
utf-8是一个编码规则,unicode是字符集,注意不要混淆

直接tostring后发现乱码,设定以utf-8规则解析成byte类型,然后decode成unicode字符串类型,这里不指定使用的也是utf-8规则,但一般还是为了规范进行指定
打印出来的时候,发现将HTML文本进行了规范化

#解析html文件
etree.parse(’.html’)
//将文件转换成element对象,但默认是以xml解析器,如果遇到不规范的html代码,就会出错,此时需要指定为HTML解析器

parser = etree.HTMLParse(encoding = ‘utf-8’)
etree.parse(’.html’, parser = parser)
//如果要指定转换类型,则需使用指定解析器


from lxml import etree

parser = etree.HTMLParser(encoding = 'utf-8')
html = etree.parse("123.html", parser = parser)

trs = html.xpath("//div [@class = 'recruit-list']")
for tr in trs:
    ZW = tr.xpath("./a/h4/text()")[0]
    DJ = tr.xpath("./a/p[1]/span[1]/text()")[0]
    WZ = tr.xpath("./a/p[1]/span[2]/text()")[0]
    LX = tr.xpath("./a/p[1]/span[3]/text()")[0]
    SJ = tr.xpath("./a/p[1]/span[4]/text()")[0]
    XQ = tr.xpath("./a/p[2]/text()")[0]
    ID = tr.xpath(".//div/div[3]/@id")[0]
  
    url = "https://careers.tencent.com/jobdesc.html?postId=" + ID
    
    GW = {
        '链接' : url,
        '职位' : ZW,
        '等级' : DJ,
        '工作地点'  : WZ,
        '工作类型' : LX,
        '发布时间' : SJ,
        '详情' : XQ 
        }
    
    print(GW)

爬取腾讯招聘网页的实例
注意 /@id 是获取id这个属性的值
xpath 返回的是一个列表
. 表示从当前目录下继续查找,否则将会从源目录下开始查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值