python爬虫之xpath和lxml模块介绍

python爬虫之xpath和lxml模块介绍

  • 1 xpath和xml引入
    • 1.1 基本概念
    • 1.2 结点的关系
  • 2 xpath介绍
    • 2.1 工具安装
    • 2.2 基础使用
    • 2.1 常规操作
    • 2.2 定位特定内容
    • 2.3 通配符
  • 3 lxml模块的使用
    • 3.1 模块的简介
    • 3.2 模块的使用

上篇博文我们学习了正则表达式,这次博文我们来学习xpath和lxml模块以方便确定。
首先我们先整体对比一下二者:
正则表达式:类似于根据标准逐层筛选,到达我们的目标
xpath和lxml模块:类似于根据目标地址直接获取
python爬虫之xpath和lxml模块介绍_第1张图片

1 xpath和xml引入

1.1 基本概念

  • XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航
  • xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。
  • lxml是python中的一个包,这个包中包含了将html文本转成xml对象,和对对象执行xpath的功能
    python爬虫之xpath和lxml模块介绍_第2张图片
    上图中element中就是lxml内容,里面存储了元素
    下面我们来讲结点的关系

1.2 结点的关系

# 结点内容
xml_content = '''


    Harry Potter
    K.Rowing
    2005
    29


'''
# 结点关系
xml_content = '''
  # 文档节点
  # title author year price 的父元素
    Harry Potter  #title是元素节点 lang='eng' 属性节点
    K.Rowing  # author是元素节点、author元素的先辈(Ancestor)是 book bookstore、title author year price 这些元素都是同胞(Sibling)
    2005   # year是元素节点
    29  # price是元素节点
   # title author year price 的父元素
   # 文档节点
'''
#  文档节点
# J K.Rowing 元素节点
# lang='eng' 属性节点

# 父Parent  book元素是 title author year price元素的父
# 子Children 零个一个或者多个title author year price 都是book元素的子

# 同胞Sibling 拥有相同父的节点
# title author year price 这些元素都是同胞

# 先辈Ancestor 某节点的父 父的父
# title元素的先辈是 book bookstore

2 xpath介绍

2.1 工具安装

常用节点选择工具:

  • chrome插件 :XPath Helper
  • Firefox插件:Xpath Checker
    安装顺序参见博文:
    chrome插件XPath Helper2.0.2的下载安装与使用
    启动chrome插件用:ctrl+shift+x
    在这里插入图片描述

2.2 基础使用

2.1 常规操作

python爬虫之xpath和lxml模块介绍_第3张图片

  • /:绝对路径查找,查找内容太长,不方便观看,text()是提取内容
    python爬虫之xpath和lxml模块介绍_第4张图片
    python爬虫之xpath和lxml模块介绍_第5张图片
    python爬虫之xpath和lxml模块介绍_第6张图片
  • //:直接定位代码中所有的标签,利用标签和属性得到相应的内容
    python爬虫之xpath和lxml模块介绍_第7张图片
  • @://标签[@属性]查找对应内容
    python爬虫之xpath和lxml模块介绍_第8张图片
    python爬虫之xpath和lxml模块介绍_第9张图片

2.2 定位特定内容

查找某个特定的节点或者包含某个指定的值的节点
python爬虫之xpath和lxml模块介绍_第10张图片
以智联招聘索取页码为例
python爬虫之xpath和lxml模块介绍_第11张图片
python爬虫之xpath和lxml模块介绍_第12张图片
python爬虫之xpath和lxml模块介绍_第13张图片

2.3 通配符

python爬虫之xpath和lxml模块介绍_第14张图片
python爬虫之xpath和lxml模块介绍_第15张图片

3 lxml模块的使用

3.1 模块的简介

  • Python中,我们安装lxml库来使用XPath 技术
  • lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML数据
  • 利用etree.HTML,将字符串转化为Element对象

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

import lxml
# 第一个是将html/xml字符串转化为element对象
from lxml import etree
# 第二个是element对象可以转换为字符串或者是二进制类型的数据

3.2 模块的使用

wb_data = """
        
        """
html_element = etree.HTML(wb_data)
# print(html_element)  # 
result = etree.tostring(html_element)
r = result.decode()
print(type(r),r) # 
# 
#
    # < 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" > third 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 > < / ul > # < / div > # < / body > < / html >
# 获取li标签下面a标签的href
links = html_element.xpath('//li/a/@href')  # 注意这里是'//li/a/@href',在网页里面是//li/a[@href] !!注意区别
print(links)  # ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
# 获取li标签下a标签的内容
result = html_element.xpath('//li/a/text()')
print(result)  # ['first item', 'second item', 'third item', 'fourth item', 'fifth item']
# 这些数据组合到一个字典当中 例如{'href':'link1.html','title':'first item'}
links = html_element.xpath('//li/a/@href')
for link in links:
    dict = {}
    dict['href'] = link
    result = html_element.xpath('//li/a/text()')
    dict['title'] = result[links.index(link)]
    print(dict)
'''
{'href': 'link1.html', 'title': 'first item'}
{'href': 'link2.html', 'title': 'second item'}
{'href': 'link3.html', 'title': 'third item'}
{'href': 'link4.html', 'title': 'fourth item'}
{'href': 'link5.html', 'title': 'fifth item'}
'''

你可能感兴趣的:(python爬虫之xpath和lxml模块介绍)