news 2026/3/11 23:45:05

数据提取_1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据提取_1

1. xpath 查找

1.1 xpath介绍:

1.lxml是python的一个解析库,支持HTML和XML,支持XPath解析方式,而且解析效率非常高。

2.XPath,全称XML Path Language ,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。

3.全称为XML Path Language 一种小型的查询语言

4.说到XPth这门语言,不得不说它所具备的优点:

1.可在XML中查找信息

2.支持HTML的查找

3.通过元素和属性进行导航

1.2 xpath常用规则

1 .nodename——>选取此节点的所有子节点

2. /——>从当前节点选取直接子节点

3. //——>从当前节点选取子孙节点

4. . ——>选取当前节点

5. … ——>选取当前节点的父节点

6. @ ——>选取属性

xpath 操作:
#导入lxml模块fromlxmlimportetreewithopen('XpathDemo.html','r',encoding='utf8')asf:#html可以接收 byte 和字符串连接#etree.HTML()可以用来解析字符串格式的HTML文档对象html=etree.HTML(f.read())# / 从根节点选取节点·print(html.xpath("/html/head"))# // 从当前节点选取子孙节点print(html.xpath("//div"))print(html.xpath("/html/body//p"))#xpath 匹配结果为列表ul=html.xpath("//ul[0]")# xpath 跟谁调用无关 只跟表达式有关print(ul.xpath("ul//head"))# . 选取当前节点print(ul.xpath("./li"))# .. 选取当前节点的父节点print(print(ul.xpath("../p")))# [index] 根据下标选取节点print(ul.xpath("./li[3]/p/span/text()"))# index值 可以为函数 last()结果 表示最后一个print(ul.xpath("./li[last()]/p/span/text()"))print(ul.xpath("./li[last()-1]/p/span/text()"))

2. jsonpath使用

xpathJSONPathDescription
/$表示根元素
.@当前元素
/.or [ ]子元素
n/a父元素
//递归下降,JSONpath从E4x借鉴的
**通配符,表示所有元素
@n/a属性访问字符
[][]子元素操作符
|[,]连接操作符在xPath结果合并其他结点集合,JSONP允许name或者数组索引
n/a[start🔚step]数组分割操作从ES4借鉴
[]?()应用过滤表示式
n/a()脚本表达式,使用在脚本引擎下面
()n/aXpath分组
fromjsonpathimportjsonpathimportjsonwithopen("area.json","r",encoding="utf8")asf:data=json.load(f)print(data,type(data))# $ 根元素# . 子元素# 获取根元素下content结点的第一个元素content=jsonpath(data,"$.content")print(content)#获取所有id节点值print(jsonpath(content,"$..id"))#[] 子元素print(jsonpath(content,"$.data[0]"))print(jsonpath(content,"$.data[:2]"))print(jsonpath(content,"$.data[:-1]"))print(jsonpath(content,"$.data[(@.length-1)]"))print(jsonpath(content,"$.data[?(@.code)]"))# * 通配符 表示所有元素# 获取data节点下第一个元素的所有节点值print(jsonpath(content,"$.data[0].*"))

案例:从17k网站提取数据

importrequestsfromjsonpathimportjsonpath headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"}#登陆网址login_url="https://passport.17k.com/ck/user/login"#书架网址books_url="https://user.17k.com/ck/author2/shelf?page=1&appKey=2406394919"form_data={'loginName':'17590967558','password':'@z310425'}#创建会话session=requests.session()login_response=session.post(login_url,headers=headers,data=form_data)print(login_response.status_code)print(login_response.cookies)#获取书架信息books_response=session.get(books_url,headers=headers)#获取所有书名和作者名# print(books_response.json())print(jsonpath(books_response.json(),"$..))print(jsonpath(books_response.json(),"$..authorPenName"))

3. 正则查找

  • re 是匹配字符串内容的一种规则
  • 1.re.compile 正则表达式的语法
  • 2.re.search 找一个
  • 3.re.match从头找一个 没有返回None
  • 4.re.findall 找所有 返回列表
  • . ——> 匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
  • *——>匹配0个或多个的表达式
  • +——>匹配1个或多个的表达式
  • ?——>匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
  • []——>表示一组字符
  • ‘|’——>A|B,创建一个正则,将匹配A或B。
  • \s——>匹配任何空白字符
  • \d——>匹配任何数字

4.csv

4.1 介绍
  • csv 文件是大数据文件存储格式的文件 结构与excel不同。
  • csv 是一种通用的,相对简单的文件格式,被用户,商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的。
  • 因为大量程序都支持某种csv变本,至少是作为一种可选择的输入\输出格式。
  • 例如,一个用户可能需要交换信息,从一个以私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据库程序可以导出数据为"csv",然后被导出的csv文件可以被电子表格程序导入。

案例:

列表——》list

csv文件_写入数据

importcsv#定义表头headers=["book_name","author_name","book_type"]#列表数据book_rows_li=[['网游:开局防御加满,化身移动要塞','谒始','游戏竞技'],['全球废土:我以机械比肩神明','岐峰','科幻末世'],['民间诡梦实录','王诡一','都市小说'],['奶包三岁半,我是全豪门的团宠','惊颜','现代言情'],['万恶的考试和资本','白日不栽柳','浪漫青春']]withopen("ccc/books1.csv","w",encoding="utf8",newline="")aswf:#创建一个写入对象csv_writer=csv.writer(wf)#写入表头csv_writer.writerow(headers)#写入多行数据csv_writer.writerows(book_rows_li)

css文件_读取数据

#读取css文件 以列表格式输出withopen("ccc/books1.csv","r",encoding="utf8",newline="")asrf:#创建一个读取(可迭代对象)reader=csv.reader(rf)#写入表头next(reader)forrowinreader:print(row)

字典——》dict

csv文件_写入数据

#写入字典数据到csv文件 --常用方式withopen("ccc/books2.csv","w",encoding="utf8",newline="")aswf:#创建写入对象 需要传递表头 目的:确定数据写入位置writer=csv.DictWriter(wf,headers)#写入表头writer.writeheader()#写入多行数据writer.writerows(book_rows_li)

css文件_读取数据

#读取字典数据到csv文件 --常用方式withopen("ccc/books2.csv","r",encoding="utf8",newline="")asrf:#创建写入对象 需要传递表头 目的:确定数据写入位置reader=csv.DictReader(wf,headers)#写入表头next(reader)forrowinreader:print(row)

案例——爬取壁纸

importreimportrequests_html session=requests_html.HTMLSession()url='http://www.netbian.com/'response=session.get(url)#设置网页解析的编码模式(根据网页编码确定)response.encoding="gbk"html=response.text#编译正则表达式 re.s 设置,匹配换行 re.I 设置匹配对大小写不敏感pattern=re.compile(r'<img src="(.*?)".*?>',re.S|re.I)print(pattern.findall(html))

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 3:24:44

无需微调也能识别新物体,开放词汇检测真香体验

无需微调也能识别新物体&#xff0c;开放词汇检测真香体验 在传统计算机视觉任务中&#xff0c;模型只能识别训练时见过的类别——比如“猫”“狗”“汽车”。一旦遇到训练集之外的新物体&#xff0c;比如“水豚”或“平衡车”&#xff0c;系统就束手无策。这种封闭词汇的限制…

作者头像 李华
网站建设 2026/3/11 3:06:06

终极B站客户端使用指南:让Linux用户畅享高清观影体验

终极B站客户端使用指南&#xff1a;让Linux用户畅享高清观影体验 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux 作为Linux用户&#xff0c;您是否曾为无法在系统上享受…

作者头像 李华
网站建设 2026/3/10 20:30:41

ELAN版本管理终极指南:3个实战技巧提升Lean开发效率

ELAN版本管理终极指南&#xff1a;3个实战技巧提升Lean开发效率 【免费下载链接】elan A Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan 作为一名长期使用Lean定理证明器的开发者&#xff0c;我深刻体会到版本管理对于数学证明项目的重要性。…

作者头像 李华
网站建设 2026/3/11 3:05:35

保姆级教程:如何快速部署Qwen-Image-2512-ComfyUI镜像

保姆级教程&#xff1a;如何快速部署Qwen-Image-2512-ComfyUI镜像 你是否也想用上阿里最新开源的图片生成模型 Qwen-Image-2512&#xff1f;但面对复杂的环境配置、依赖安装和启动流程&#xff0c;总觉得无从下手&#xff1f;别担心&#xff0c;这篇教程就是为你准备的。 本文…

作者头像 李华
网站建设 2026/3/11 3:05:22

一键解锁八大网盘直链下载,告别限速烦恼

一键解锁八大网盘直链下载&#xff0c;告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#xff0c;无需输…

作者头像 李华
网站建设 2026/3/11 3:05:08

如何快速通过手机号查询QQ号:3分钟掌握的实用技术指南

如何快速通过手机号查询QQ号&#xff1a;3分钟掌握的实用技术指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 在日常生活中&#xff0c;我们经常会遇到需要验证手机号与QQ号关联关系的情况。无论是忘记QQ密码需要找回账号&#…

作者头像 李华