爬虫页面解析 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 ...
随机推荐
- Spring:工厂模式哪里解耦了?
菜瓜:我一定是太菜了,为什么别人说Spring屏蔽了new关键字创建对象就很丝滑?我完全get不到这个操作的好处啊,我自己写new它也很香啊 水稻:emmmm,换个角度想啊,如果把现在用的注解@Aut ...
- Redis在CentOS for LInux上安装详细教程
1.首先上传安装包,这里我以 redis-5.0.8.tar.gz 为例子. Linux下载redis地址:wget http://download.redis.io/releases/redis-5 ...
- cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort
cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) stable_sort(b,e,p) ...
- MySQL实战45讲笔记一
MySQL的基本架构大体可以分为server层和存储引擎层,逻辑架构图如下: Server层除了图中显示的,还包括所有的内置函数(包括日期.时间.数学和加密函数等),存储过程.触发器.视图等跨存储引擎 ...
- PHP利用FTP上传文件连接超时之开启被动模式解决方法
初始代码: <?php $conn = ftp_connect("localhost") or die("Could not connect"); ftp ...
- JavaWeb网上图书商城完整项目--day02-19.修改密码功能流程分析
我们来看看修改密码的业务流程操作:
- python实现从文件夹随机拷贝出指定数量文件到目标文件夹
为了方便倒腾数据,功能如题,该脚本和操作目录在同一根目录 实际运行时要手动修改程序中:cpfile_rand('img', 'outfile', 10) # 操作目录,输出目录,输出数量 import ...
- .net Core中如何读取Appsetting配置文件
现在APPSetting下面配置以下节点 { "Logging": { "IncludeScopes": false, "LogLevel" ...
- object detection api调参详解(兼SSD算法参数详解)
一.引言 使用谷歌提供的object detection api图像识别框架,我们可以很方便地重新训练一个预训练模型,用于自己的具体业务.以我所使用的ssd_mobilenet_v1预训练模型为例,训 ...
- Zookeeper-Access Control List(ACL)
概述 Z K作为一个分布式协调框架.内部存储着一些分布式系统运行时状态的元数据.如何有效的保护这些数据的安全.如何做一个比较好的权限控制显得非常的重要. ZK 为我们提供一套完善的 ACL(acces ...