python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)
全栈工程师开发手册 (作者:栾鹏)
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表达式)相关推荐
- python网络爬虫系列教程——python中pyquery库应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install pyquery" 离线安装 ...
- python网络爬虫系列教程——python中requests库应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python中requests库的基础应用,网页数据挖掘的常用库之一.也就是说最主要的功能是从网页抓取数据. 使用前需要先联网安装reques ...
- python网络爬虫系列教程——python中urllib、urllib2、cookie模块应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python数据挖掘库urllib.urllib2.cookie知识全解.本文使用python2.7环境,如果需要使用python3的环境只需 ...
- python网络爬虫系列教程——python网络数据爬虫误区,让你的爬虫更像人类
1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望 ...
- python网络爬虫系列教程——Python+PhantomJS +Selenium组合应用
全栈工程师开发手册 (作者:栾鹏) python教程全解 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器. 理 ...
- python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...
感谢大家长期对Python爱好者社区的支持,后期Python爱好者社区推出Python网络爬虫系列教程.欢迎大家关注.以下系列教程大纲,欢迎大家补充.视频长期连载更新中 --------------- ...
- python网络爬虫系列教程——Scrapy框架应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 安装 在cmd中输入 Scrapy的安装依赖wheel.twiste.lxml包.所以先通过pip install wheel安装wheel库 ...
- python网络爬虫系列教程——PhantomJS包应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没天理了.所以,我们需要有一些好用 ...
- python网络爬虫系列(一)——urllib库(urlopen、urlretrieve、urlencode、parse-qs、urlparse和urlsplit、request.Request类)
urllib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. 一.urlopen函数: 在Python3的url ...
最新文章
- 【Android】Activity生命周期(亲测)
- 疯狂ios之cocos2d中的声音
- ef 数据迁移mysql_Windows下重装xampp并做MySQL数据迁移的步骤
- sql的外键约束和主键约束_SQL约束
- struts实现分页_在TensorFlow中实现点Struts
- JEECG新版UI规划,主要提供H5方案(采用主流技术)
- 获江苏国资阿里小米等入股 苏宁易购复牌涨停
- Cookie投票程序
- 2 java内存模型是什么_java中内存模型是什么?有什么用?
- Python Selenium打开谷歌浏览器
- 淘宝美工设计师细说何为天猫透明背景
- 华为Code Craft 2020 + ZTE 中兴捧月
- 基于80C51单片机——中断小结
- 新手程序员必备10大技能
- Mysql 分库分表 Mycat
- 网络图如何用计算机计算方法,工程网络图时间参数最简单计算方法.doc
- HTML5期末大作业:旅游出行网站设计——武汉旅游(11页) HTML+CSS+JavaScript dreamweaver作业静态HTML网页设计模板
- element-plus组件默认英文的解决办法
- 饿了么大数据平台建设
- 【hx717称重传感器采集芯片】双输入通道高精度 24 位模/数(A/D)转换器芯片(附芯片手册)