爬虫页面解析 lxml 简单教程
一、与字符串的相互转换
1.字符串转变为etree 对象
import lxml.html
tree = lxml.html.fromstring(content) # content 字符串对象
2.etree对象转变为字符串
from lxml import etree
content = etree.tostring(tree,encoding='utf-8')
data = content.decode('utf-8')
二、元素增删改
1.查看元素
etree._Element 是一个设计很精妙的结构,可以把他当做一个对象访问当前节点自身的文本节点,可以把他当做一个数组,元素就是他的子节点,可以把它当做一个字典,从而遍历他的属性
>>> root.text
'root content' # 注意只是 root 自身的文本,并不包含子节点的文本
>>> root.tag # 标签
'root'
>>> root[0].tag # root 的第一个子元素的标签
'foo'
>>> foo = root[0] # root 的第一个子元素
>>> for attr, val in foo.items():
... print(attr, val)
...
id foo-id
class foo zoo
>>> foo.get('id') # 获取foo的id的属性值
'foo-id'
>>> foo.attrib # 获取foo的所有属性以及属性值
{'class': 'foo zoo', 'id': 'foo-id'}
2.增加元素
找到要插入的位置,然后再插入,例如作为某个元素的子节点插入
import etree
root = etree.Element("root") # 找到root元素
root.append( etree.Element("child1") ) # 作为root的子元素插入
child2 = etree.SubElement(root, "child2") # 作为root的子元素插入
child3 = etree.SubElement(root, "child3") # 作为root的子元素插入
3.修改元素
增加属性
root['name'] = "root"
修改属性
root['name'] = "new_root"
.set(key, value=None):
root.set('name', "root"):
删除属性
strip_attributes(tree_or_element, *attribute_names)
strip_attributes(root, 'root')
修改元素文本值
root.text = "new_text"
4.删除元素
通过tag标签删除 strip_elements(tree_or_element, with_tail=True, *tag_names)
删除某一元素:找到其父节点,通过父节点删除子节点的方式删除
parent = node.getparent()
parent.remove(node)
删除元素的子节点
root.clear()
三、元素的父,子,同胞节点查找
1.元素的父节点
root.getparent()
2.元素的子节点
root.getchildren()
3.元素的同胞节点
获取上一个位置同胞 el.getprevious()
获取下一个位置同胞 el.getnext()
4.获取etree的根节点 tree.getroot()
5 iter
.iterchildren() Element.iterchildren() iterates over the children of an element in either direction
.itersiblings() Element.itersiblings() iterates over either the following or preceding siblings of an element
.iterancestors() Element.iterancestors() iterates over the ancestors of an element (from parent to parent)
.iterdescendants() Element.iterdescendants() iterates over the descendants of an element
四、元素查询xpath路径选择器
1.根据元素属性
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
| /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。 |
# 根据属性值模糊匹配
//a[contains(@class, “”)]
2.根据元素文本
# 等于值
//a[text()="文本"]
# 模糊匹配
//a[contains(text(),"文本")]
3.利用xpath轴
轴可定义相对于当前节点的节点集。
| 轴名称 | 结果 |
|---|---|
| ancestor | 选取当前节点的所有先辈(父、祖父等)。 |
| ancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
| attribute | 选取当前节点的所有属性。 |
| child | 选取当前节点的所有子元素。 |
| descendant | 选取当前节点的所有后代元素(子、孙等)。 |
| descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
| following | 选取文档中当前节点的结束标签之后的所有节点。 |
| following-sibling | 选取当前节点之后的所有兄弟节点 |
| namespace | 选取当前节点的所有命名空间节点。 |
| parent | 选取当前节点的父节点。 |
| preceding | 选取文档中当前节点的开始标签之前的所有节点。 |
| preceding-sibling | 选取当前节点之前的所有同级节点。 |
| self | 选取当前节点。 |
具体使用方法示例为:parent::div,即轴名称::标签名
示例://div[contains(text(),'产证地址')]/parent::td
前半段//div[contains(text(),'产证地址')]为找到内容包含产证地址的div节点然后它的上一级节点 parent::td,
五、重要的函数附表
https://www.runoob.com/xpath/xpath-tutorial.html
爬虫页面解析 lxml 简单教程的更多相关文章
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- php爬虫最最最最简单教程
php爬虫最最最最简单教程 一.总结 一句话总结:用的爬虫框架,却是用的自己的例子(因为网站结构的变化,作者的例子不一定好用) 爬虫框架 自己例子 1.发现自己的运行效果和作者的不一样怎么办? 耐下性 ...
- 【XPath Helper:chrome爬虫网页解析工具 Chrome插件】XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插件网
[XPath Helper:chrome爬虫网页解析工具 Chrome插件]XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插 ...
- python爬虫网页解析之lxml模块
08.06自我总结 python爬虫网页解析之lxml模块 一.模块的安装 windows系统下的安装: 方法一:pip3 install lxml 方法二:下载对应系统版本的wheel文件:http ...
- 爬虫---lxml简单操作
前几篇写了一些Beautiful Soup的一些简单操作,也拿出来了一些实例进行实践,今天引入一个新的python库lxmt,lxmt也可以完成数据的爬取哦 什么是lxml lxml是python的一 ...
- python爬虫数据解析之BeautifulSoup
BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...
- python爬虫之解析库Beautiful Soup
为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...
- springmvc简单教程
IDEA建立Spring MVC Hello World 详细入门教程(转自) 引子,其实从.NET转Java已经有几个月时间了,项目也做了不少,但是很多配置都是根据公司模板或者网上教程比忽略画瓢 ...
- ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...
随机推荐
- DML_The OUTPUT Clause
DML_The OUTPUT Clause /**/ ------------------------------------------------------------------------- ...
- 使用java实现单链表(转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html)
使用java实现单链表----(java中的引用就是指针)转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html ? 1 2 3 4 5 6 7 ...
- git安装和第一次提交过程
1,新建文件夹test,运行命令 git init 2,找到test的.git文件夹,打开之后找到config文件,在最后边加上一句话 [user] email=your email name=you ...
- vim改变字体和查看映射的(mapping)命令
临时修改.通过gvim Command MODE,输入如下命令即可: Linux/Unix: set guifont=Monospace\空格14 注意这里需要对空格使用\进行转义 Windows: ...
- 手把手教你学Numpy,搞定数据处理——收官篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Numpy专题第6篇文章,我们一起来看看Numpy库当中剩余的部分. 数组的持久化 在我们做机器学习模型的研究或者是学习的时候,在完成 ...
- OpenResty入门之使用Lua开发Nginx插件
记住一点:nginx配置文件很多坑来源自你的空格少了或多了. OpenResty OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第 ...
- 【WebLogic使用】3.WebLogic配置jndi数据源
参见博客:https://blog.csdn.net/acmman/article/details/70146603 参考视频教程: 一.什么是jndi数据源JNDI是Java命名与目录接口(Java ...
- 微信小程序预览Word文档
<view data-url="https://xxxcom/attachment/word.docx" data-type="docx" catchta ...
- github知名企业开源项目索引
亚马逊:https://github.com/amzn 饿了么 https://github.com/ElemeFEhttp://lrd.ele.me/腾讯 https://github.com/Te ...
- RocketMQ入门到入土(二)事务消息&顺序消息
接上一篇:RocketMQ入门到入土(一)新手也能看懂的原理和实战! 一.事务消息的由来 1.案例 引用官方的购物案例: 小明购买一个100元的东西,账户扣款100元的同时需要保证在下游的积分系统给小 ...