Python数据提取-lxml模块
更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com
初中毕业读什么技校 http://cntkd.net
茂名一技http://www.enechn.com
ppt制作教程步骤 http://www.tpyjn.cn
兴化论坛http://www.yimoge.cn
电白论坛 http://www.fcdzs.com
知识点:
- 了解lxml模块和
xpath
语法的关系; - 了解lxml模块的使用场景;
- 了解lxml模块的安装;
- 了解 谷歌浏览器
xpath helper
插件的安装和使用; - 掌握xpath语法-基础节点选择语法;
- 掌握 xpath语法 -节点修饰语法;
- 掌握xpath语法 - 其他常用语法;
- 掌握 lmxl模块中使用xpath语法定位元素提取数学值或文本内容;
- 掌握lxml模块etree.tostring函数的使用;
1、了解lxml模块和xpath语法
对html
或xml形式的文本提取特定的内容,就需要我们掌握lxml模块的使用和xpath语法。
lxml模块可以利用xPath规则语法,来快速的定位HEML \ XML 文档中特定元素以及获取节点信息(文本内容、属性值);
XPath
(XML Path Language)是一门HTML\XML 文档中查找信息的语言,可用来在HTML|XML文档中对元素和属性进行遍历。
提取xml、html的数据需要lxml模块和xpath语法配合使用;
2、谷歌浏览器xpath helper插件的安装和使用
- 在谷歌浏览器中对当前页面测试xpath语法规则。
- 谷歌浏览器xpath helper插件的安装和使用
我们以windows
为例进行xpath helper的安装。
xpath helper
插件的安装:
- 1)、下载Chrome插件 XPath Helper
- 可以在Chrome应用商城进行下载,如果无法下载,也可以从下面的链接进行下载
- 2)、把文件的后缀名crx改为rar,然后解压到同名文件夹中;
- 3)、把解压后的文件夹拖入到已经开启开发者模式的chrome浏览器扩展程序界面;
3、xpath 的节点关系
学习xpath语法需要先了解xpath中的节点关系。
3.1 xpath中的节点什么
每个html
、xml的标签我们都称之为节点,其中最顶层的节点称为根节点。我们以xml
为例、html也是一样的。、
3.2 xpath中节点的关系
author
是 title
的第一个兄弟节点。
4、xpath语法 - 选取节点以及提取属性或文本内容的语法
- 1)、XPath 使用路径表达式来选取XML文档中的节点或者节点集。
- 2)、这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似;
- 3)、使用chrome插件选择标签时候,选中的标签会添加属性class=“xh-highlight”;
4.1 xpath定位节点以及提取属性或文本内容的语法
5、xpath 语法 - 选取特定节点的语法
可以根据标签的属性值,下标等来获取特定的节点。
5.1 选取特定节点的语法
5.2 关于xpath的下标
在xpath中,第一个元素的位置是1;
最后一个元素的位置是last();
倒数第二个是last() - 1;
6、xpath语法 - 选取未知节点的语法
可以同通配符来选取未知的html
、xml
的元素。
6.1、选取未知节点的语法
7.lxml模块的安装与使用示例
lxml模块是一个第三方模块,安装之后使用。
7.1 lxml模块的安装
对发送请求获取的xml或html形式的响应内容进行提取。
pip install lxml
7.2 爬虫对html提取的内容
提取标签中的文本内容;
提取标签中的属性的值;
比如,提取a标签中href属性的值,获取url,进而继续发起请求。
7.3 lxml模块的使用
1)、导入lxml的etree库
from lxml import etree
2)、利用etree.HTML
,将html字符串(bytes类型或str类型)转化为Element
对象,Element
对象具有xpath的方法,返回结果的类别。
html = etree.HTML(text) ret_list = html.xpath("xpath语法规则字符串")
3)、xpath方法返回列表的三种情况
返回空列表:根据xpath语法规则字符串,没有定位到任何元素;
返回由字符串构成的列表:xpath字符串规则匹配的一定是文本内容或某属性的值;
返回由Element
对象构成的列表:xpath规则字符串匹配的是标签,列表中的Element
对象可以继续进行xpath;
import requests from lxml import etree
class Tieba(object):
? ? def init(self,name):
? ? ? ? self.url = “https://tieba.baidu.com/f?ie=utf-8&kw={}”.format(name)
? ? ? ? self.headers = {
? ? ? ? ? ? ‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36’
? ? ? ? }
? ? def get_data(self,url):
? ? ? ? response = requests.get(url,headers=self.headers)
? ? ? ? with open(“temp.html”,“wb”) as f:
? ? ? ? ? ? f.write(response.content)
? ? ? ? return response.content
? ? def parse_data(self,data):
? ? ? ? # 创建element对象
? ? ? ? data = data.decode().replace("<!–","").replace("–>","")
? ? ? ? html =etree.HTML(data)
? ? ? ? el_list = html.xpath(’//li[@class=“j_thread_list clearfix”]/div/div[2]/div[1]/div[1]/a’)
? ? ? ? #print(len(el_list))
? ? ? ? data_list = []
? ? ? ? for el in el_list:
? ? ? ? ? ? temp = {}
? ? ? ? ? ? temp[‘title’] = el.xpath("./text()")[0]
? ? ? ? ? ? temp[‘link’] = ‘http://tieba.baidu.com’ + el.xpath("./@href")[0]
? ? ? ? ? ? data_list.append(temp)
? ? ? ? # 获取下一页url
? ? ? ? try:
? ? ? ? ? ? next_url = ‘https:’ + html.xpath(’//a[contains(text(),“下一页”]/@href’)[0]
? ? ? ? except:
? ? ? ? ? ? next_url = None
? ? ? ? return data_list,next_url
? ? def save_data(self,data_list):
? ? ? ? for data in data_list:
? ? ? ? ? ? print(data)
? ? def run(self):
? ? ? ? # url
? ? ? ? # headers
? ? ? ? next_url = self.url
? ? ? ? while True:
? ? ? ? ? ? # 发送请求,获取响应
? ? ? ? ? ? data = self.get_data(self.url)
? ? ? ? ? ? # 从响应中提取数据(数据和翻页用的url)
? ? ? ? ? ? data_list,next_url = self.parse_data(data)
? ? ? ? ? ? self.save_data(data_list)
? ? ? ? ? ? print(next_url)
? ? ? ? ? ? # 判断是否终结
? ? ? ? ? ? if next_url == None:
? ? ? ? ? ? ? ? break
if name == ‘main’:
? ? tieba =Tieba(“传智播客”)
? ? tieba.run()
8、lxml模块中etree.tostring函数的使用
运行下边的代码,观察对比html
的原字符串和打印输出的结果
from lxml import etree
html_str = “”"<div<<ul>
? ? ? ? <li class=“item-1”><a href=“link1.html” rel=“external nofollow” >first item</a></li>
? ? ? ? <li class=“item-1”><a href=“link2.html” rel=“external nofollow” >second item</a></li>
? ? ? ? <li class=“item-inactive”><a href=“link3.html” rel=“external nofollow” >third item</a></li>
? ? ? ? <li class=“item-1”><a href=“link4.html” rel=“external nofollow” >fourth item</a></li>
? ? ? ? <li class=“item=0”><a href=“link5.html” rel=“external nofollow” >fifth item</a>
? ? ? ? </ur></div>
“”"
html = etree.HTML(html_str)
handeled_html_str = etree.tostring(html).decode()
print(handeled_html_str)
结论:
lxml.etree.HTML(html_str)
可以自动补全标签;lxml.etree.tostring
函数可以将转换位Element
对象再转换回html字符串;- 爬虫如果使用
lxml
来提取数据,应该以lxml.etree.tostring
的返回结果作为提取数据的依据;
到此这篇关于Python数据提取-lxml模块的文章就介绍到这了,更多相关Python -lxml模块内容请搜索菜鸟教程www.piaodoo.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持菜鸟教程www.piaodoo.com!
Python数据提取-lxml模块相关推荐
- python网络爬虫系列(六)——数据提取 lxml模块
一.数据提取-lxml模块 知识点 了解 lxml模块和xpath语法的关系 了解 lxml模块的使用场景 了解 lxml模块的安装 了解 谷歌浏览器xpath helper插件的安装和使用 掌握 x ...
- Python爬虫学习之第七天---数据提取-lxml模块和Xpath使用
爬虫学习之第七天-数据提取-lxml模块和Xpath使用 知识点:了解 lxml模块和xpath语法的关系了解 lxml模块的使用场景了解 lxml模块的安装了解 谷歌浏览器xpath helper插 ...
- 数据提取-lxml模块系列二
3.2 xpath中节点的关系 author是title的第一个兄弟节点 4. xpath语法-基础节点选择语法 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集. 这些路径表达式和我 ...
- python网络爬虫系列(五)——数据提取 jsonpath模块
一.数据提取概述 知识点 了解 响应内容的分类 了解 xml和html的区别 1. 响应内容的分类 在发送请求获取响应之后,可能存在多种不同类型的响应内容:而且很多时候,我们只需要响应内容中的一部分数 ...
- Python 数据增强 -- PIL模块
Python 数据增强 – PIL模块 一.导入模块.读取图片 # 图像操作模块 from PIL import Image# 图像颜色增强模块 from PIL import ImageEnhanc ...
- 【python】——爬虫03 数据提取[jsonpath模块、lxml模块]
目录 一.概述 1. 响应内容分类 2. xml和html 3. 数据解析 二.jsonpath模块 1. 提取数据的方法 2. jsonpath语法规则 3. jsonpath练习:获取拉钩网城市j ...
- 爬虫之数据提取jsonpath模块的使用场景和使用方法
1. jsonpath模块的使用场景 如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的.jsonpath模块就能解决这个痛点. jsonpath可以按照key对p ...
- Python数据可视化---pygal模块
目录 pygal模块 安装pygal模块 pygal模块介绍 柱状图 单列柱状图 堆叠柱状图 横向柱状图 折线图 简单折线图 纵向折线图 堆叠折线图 饼状图 简单饼状图 多级饼状图 圆环图 半圆图 雷 ...
- 当你学会这项python数据提取神器时,请做好升职准备!
Jsonpath 详解 一.什么是 jsonpath ● JsonPath 是一种信息抽取类库,是从 JSON 文档中抽取指定信息的工具,提供多种语言实现版本,包括:JavaScript.Python ...
最新文章
- 【转】Visual Studio 2010 架构图之用例图(UML Use Case Diagram)
- 主题博客成功的10个理由
- java继承关键字super_java学习笔记-继承中super关键字
- 设计模式——创建型模型
- Linux SVN迁移备份的三种方法
- 服务器文件夹和电脑文件夹同步软件哪个好,windows文件同步备份软件-文件夹同步工具哪个好?...
- leetcode python 1
- 三、Arcgis api js -- 图形管理 Layer
- 【java】Java 动态调试技术原理及实践
- arpg刷怪爆装备java游戏,刷怪爆装备的单机游戏(大番茄魔改地下城与勇士)
- matlab简单分析短时傅里叶变换STFT
- mysql 结果集换页_MySQL 按结果集分页
- click事件在什么时候出发_如何解决移动端Click事件300ms延迟的问题?
- 从微信服务通知进入小程序显示环境加载失败,请稍后再试
- Shiro安全框架的原理及实现步骤
- Hibernate技术书写
- rust 案例_深入浅出rust.pdf 高清版
- Unity 打图集Atlas
- 模模搭古城搭建学习笔记2:基础设施篇
- html2d动画,HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用