全栈工程师开发手册 (作者:栾鹏)
python教程全解

python网络爬虫lxml库的应用全解。

在线安装方法:cmd中输入"pip install lxml"

离线安装,下载lxml库点击下载

python库的安装请参考Python库的安装与卸载

xpath路径选择表达式

lxml库需要记住的主要是路径选择表达式。

语法规则

表达式                      描述
nodename                选取此节点的所有子节点。
/                       子元素。
//                      后代元素。
.                       选取当前节点。
..                      选取当前节点的父节点。
@                      选取属性(获取属性的值)。

举例:

路径表达式                    结果
bookstore               选取 bookstore 元素的所有子节点。
/bookstore              选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book          选取属于 bookstore 的子元素的所有 book 元素。
//book                  选取所有 book 后代元素,而不管它们在文档中的位置。
bookstore//book         选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang                    选取名为 lang 的所有属性(获取所有名为lang属性的值)。

谓语举例:

路径表达式                            结果
/bookstore/book[1]                  选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]             选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]           选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]        选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]                     选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’]              选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]     选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title   选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

通配符:

通配符              描述
*                匹配任何元素节点。
@*              匹配任何属性节点。
node()           匹配任何类型的节点。

通配符举例:

路径表达式                结果
/bookstore/*            选取 bookstore 元素的所有子元素。
//*                     选取文档中的所有元素。
//title[@*]                选取所有带有属性的 title 元素。

|或运算符举例:

路径表达式                            结果
//book/title | //book/price         选取 book 元素的所有 title 和 price 元素。
//title | //price                   选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price     选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

python2.7、python3.6中代码

# coding:utf-8
# 网络爬虫库lxml的应用
from lxml import etreeprint(u'解析html(具有自动修复功能)')
text = '''
<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"><span class="bold">third item</span></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></ul></div>
'''
html = etree.HTML(text)
result = etree.tostring(html)
print(result)# 将字符串写入文件
fh = open('test.html', 'w')
fh.write(result.decode("utf8"))    #fh.write(result)
fh.close()print(u'读取文件(要求html代码完整)')
html = etree.parse('test.html')   #只能解析本地html、xml文件
result = etree.tostring(html, pretty_print=True)
print(result)print(u'获取所有的 <li> 标签')
html = etree.parse('test.html')  # 创建dom树
print(type(html))
result = html.xpath('//li')  # 获取元素列表
print(result)
print(len(result))  # 获取列表长度
print(type(result))
print(type(result[0]))  # 获取元素result = html.xpath('//li/@class')  # 获取 <li> 标签的所有 class属性的值
print(result)result = html.xpath('//li/a[@href="link1.html"]')  # 获取 <li> 标签下 href 为 link1.html 的 <a> 标签
print(result)result = html.xpath('//li//span')  # 获取 <li> 标签下的所有后代元素 <span> 标签
print(result)result = html.xpath('//li/span')  # 获取 <li> 标签下的所有子元素 <a> 标签
print(result)result = html.xpath('//li/a//@class')  # 获取 <li> 标签下的所有a元素的后代 class
print(result)result = html.xpath('//li[last()]/a/@href')  # 获取最后一个 <li> 下的 <a> 的 href属性
print(result)result = html.xpath('//li[last()-1]/a')  # 获取倒数第二个li元素下的a元素列表
print(result[0].text)  # 打印输出元素文本result = html.xpath('//*[@class="bold"]')  # 获取 class 为 bold 的标签名
print(result[0].tag)

python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)相关推荐

  1. python网络爬虫系列教程——python中pyquery库应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install pyquery" 离线安装 ...

  2. python网络爬虫系列教程——python中requests库应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python中requests库的基础应用,网页数据挖掘的常用库之一.也就是说最主要的功能是从网页抓取数据. 使用前需要先联网安装reques ...

  3. python网络爬虫系列教程——python中urllib、urllib2、cookie模块应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python数据挖掘库urllib.urllib2.cookie知识全解.本文使用python2.7环境,如果需要使用python3的环境只需 ...

  4. python网络爬虫系列教程——python网络数据爬虫误区,让你的爬虫更像人类

    1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望 ...

  5. python网络爬虫系列教程——Python+PhantomJS +Selenium组合应用

    全栈工程师开发手册 (作者:栾鹏) python教程全解 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器. 理 ...

  6. python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...

    感谢大家长期对Python爱好者社区的支持,后期Python爱好者社区推出Python网络爬虫系列教程.欢迎大家关注.以下系列教程大纲,欢迎大家补充.视频长期连载更新中 --------------- ...

  7. python网络爬虫系列教程——Scrapy框架应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 安装 在cmd中输入 Scrapy的安装依赖wheel.twiste.lxml包.所以先通过pip install wheel安装wheel库 ...

  8. python网络爬虫系列教程——PhantomJS包应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没天理了.所以,我们需要有一些好用 ...

  9. python网络爬虫系列(一)——urllib库(urlopen、urlretrieve、urlencode、parse-qs、urlparse和urlsplit、request.Request类)

    urllib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. 一.urlopen函数: 在Python3的url ...

最新文章

  1. 【Android】Activity生命周期(亲测)
  2. 疯狂ios之cocos2d中的声音
  3. ef 数据迁移mysql_Windows下重装xampp并做MySQL数据迁移的步骤
  4. sql的外键约束和主键约束_SQL约束
  5. struts实现分页_在TensorFlow中实现点Struts
  6. JEECG新版UI规划,主要提供H5方案(采用主流技术)
  7. 获江苏国资阿里小米等入股 苏宁易购复牌涨停
  8. Cookie投票程序
  9. 2 java内存模型是什么_java中内存模型是什么?有什么用?
  10. Python Selenium打开谷歌浏览器
  11. 淘宝美工设计师细说何为天猫透明背景
  12. 华为Code Craft 2020 + ZTE 中兴捧月
  13. 基于80C51单片机——中断小结
  14. 新手程序员必备10大技能
  15. Mysql 分库分表 Mycat
  16. 网络图如何用计算机计算方法,工程网络图时间参数最简单计算方法.doc
  17. HTML5期末大作业:旅游出行网站设计——武汉旅游(11页) HTML+CSS+JavaScript dreamweaver作业静态HTML网页设计模板
  18. element-plus组件默认英文的解决办法
  19. 饿了么大数据平台建设
  20. 【hx717称重传感器采集芯片】双输入通道高精度 24 位模/数(A/D)转换器芯片(附芯片手册)

热门文章

  1. python有什么用途-Python是什么 Python的用处
  2. python和c先学哪个-C和Python我该先学什么?
  3. 语音识别技术应用领域介绍
  4. css文字竖直显示_CSS属性设置 -- 盒子模型
  5. yarn在vscode里启动报错
  6. line-height在安卓机位置靠上
  7. 【计算机网络笔记】计算机网络五层体系结构
  8. SDL2源代码分析7:显示(SDL_RenderPresent())
  9. 电脑故障检测软件_硬核科普—常用电脑检测软件手把手教学!
  10. Helm 3 完整教程(二十一):Helm 创建和引用子模板