当前位置: 首页 > news >正文

python每日剂量(2)探讨Python中不同解析库的提取速度对比

今天闲着没事,突发异想,相对比不同解析库的解析速度,本文中对比五种解析库

一.概述

1.scrapy自带Css选择

2.scrapy自带xpath

3.lxml自带xpath     from lxml import etree

4.bs4自带美味的汤 from bs4 import BeautifulSoup

5.re 正则表达式

以这个文本为例,在循环解析链接标题时间情况,再循环499次并打印输出,约循环7500次,为了避免误差,考虑到CPU资源波动,那么Python程序能够得到的CPU时间就会或多或少,从而导致运行时间变长或变短,所以每种方式运行三次。

当CPU爆满时

 运行时间非常慢

当CPU充足时,同样是程序就会非常快

本程序都在CPU充足情况下运行

text ='''<div class="news_list zy_listbox"><!-- 展示15条数据后出现分页 --><ul><li><b>·</b><a href="/index/Article/detail.html?id=2565">青海省生态环境监测中心自行采购2024-010号</a><span>2024-07-18</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2564">单一来源采购公示</a><span>2024-07-15</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2563">青海省生态环境监测中心自行采购2024-009号(第二次)</a><span>2024-07-10</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2562">青海省生态环境监测中心自行采购2024-009号</a><span>2024-07-05</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2561">等保测评询价函</a><span>2024-05-28</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2560">单一来源采购公示</a><span>2024-05-24</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2559">青海省生态环境监测中心自行采购2024-007号(第二次)</a><span>2024-05-20</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2558">单一来源采购公示</a><span>2024-05-16</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2557">青海省生态环境监测中心自行采购2024-008号</a><span>2024-05-06</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2556">询价函</a><span>2024-04-30</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2555">青海省生态环境监测中心自行采购2024-007号</a><span>2024-04-22</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2554">青海省生态环境监测中心自行采购2023-004号(第二次)</a><span>2024-04-12</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2553">青海省生态环境监测中心自行采购2024-006号</a><span>2024-03-29</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2552">青海省生态环境监测中心自行采购2024-005号</a><span>2024-03-20</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2551">青海省生态环境监测中心自行采购2024-004号</a><span>2024-03-16</span></li></ul></div>'''

二.探讨CSS选择器解析速度

t= time.time()
selector = Selector(text=text)
for i in range(1,500):for l in selector.css('div.news_list>ul>li'):print(l.css('a::text').get())print(l.css('span::text').get())print(l.css('a::attr(href)').get())
css_parse = time.time()-t
print('css_parse用时:',css_parse)

第一次

第二次

第三次

三.探讨scrapy里的xpath解析速度

t= time.time()
selector = Selector(text=text)
for i in range(1,500):for l in selector.xpath('//div[@class = "news_list zy_listbox"]/ul/li'):print(l.xpath('.//a/text()').get())print(l.xpath('.//span/text()').get())print(l.xpath('.//a/@href').get())
scrapy_xpath_parse = time.time()-t
print('scrapy_xpath_parse用时:',scrapy_xpath_parse)

第一次

第二次

第三次

四.探讨lxml里的xpath解析速度

t= time.time()
selector = etree.HTML(text)
for i in range(1,500):for l in selector.xpath('//div[@class = "news_list zy_listbox"]/ul/li'):print(l.xpath('.//a/text()')[0])print(l.xpath('.//span/text()')[0])print(l.xpath('.//a/@href')[0])
xpath_parse = time.time()-t
print('xpath_parse用时:',xpath_parse)

第一次

第二次

第三次

 

五.探讨bs4自带BeautifulSoup解析速度

t = time.time()
soup = BeautifulSoup(text, 'html.parser')
news_list = soup.select('div.news_list.zy_listbox ul li')
for i in range(1,500):for l in news_list:print( l.select_one('a').get_text(strip=True))print(l.select_one('span').get_text(strip=True))print(l.select_one('a')['href'])
bs_parse = time.time() - t
print('bs_parse用时:',bs_parse )

第一次

第二次

第三次

.探讨re正则解析速度

t = time.time()
li = re.findall(' <li><b>·</b>.*?</li>',text)
for l in range(1,500):for i in li:print(re.search('>(.*?)</a>',i).group(1))print(re.search('<span>(.*?)</span>',i).group(1))print(re.search('<a href="(.*?)">',i).group(1))
re_time = time.time()-t
print('re:',re_time )

第一次

第二次

第三次

七.总结 

经上述程序实验证明,速度排序:

re正则  > lxml  xpath  >  bs4   BeautifulSoup  >   Scrapy  css   ≈    Scrapy  xpath

在本实验中,并不严谨,除CPU波动外,只选取了一种特定的HTML网页进行速度对比,没有考虑到不同类型和结构的网页对解析速度的影响。例如,网页中若包含大量嵌套的表单、复杂的JavaScript生成的动态内容等,甚至有个html藏在动态接口的json里面,不同解析工具的表现可能会大不相同,这使得实验结果存在一定的局限性。实际应用中还需要根据具体的HTML网页结构、解析需求以及性能指标等多方面因素综合考量,选择最合适的解析工具。

总程序

from lxml import etree
from scrapy import Selector
from bs4 import BeautifulSoup
import re
import requests
import time
text ='''<div class="news_list zy_listbox"><!-- 展示15条数据后出现分页 --><ul><li><b>·</b><a href="/index/Article/detail.html?id=2565">青海省生态环境监测中心自行采购2024-010号</a><span>2024-07-18</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2564">单一来源采购公示</a><span>2024-07-15</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2563">青海省生态环境监测中心自行采购2024-009号(第二次)</a><span>2024-07-10</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2562">青海省生态环境监测中心自行采购2024-009号</a><span>2024-07-05</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2561">等保测评询价函</a><span>2024-05-28</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2560">单一来源采购公示</a><span>2024-05-24</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2559">青海省生态环境监测中心自行采购2024-007号(第二次)</a><span>2024-05-20</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2558">单一来源采购公示</a><span>2024-05-16</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2557">青海省生态环境监测中心自行采购2024-008号</a><span>2024-05-06</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2556">询价函</a><span>2024-04-30</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2555">青海省生态环境监测中心自行采购2024-007号</a><span>2024-04-22</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2554">青海省生态环境监测中心自行采购2023-004号(第二次)</a><span>2024-04-12</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2553">青海省生态环境监测中心自行采购2024-006号</a><span>2024-03-29</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2552">青海省生态环境监测中心自行采购2024-005号</a><span>2024-03-20</span></li><li><b>·</b><a href="/index/Article/detail.html?id=2551">青海省生态环境监测中心自行采购2024-004号</a><span>2024-03-16</span></li></ul></div>'''
t= time.time()
selector = Selector(text=text)
for i in range(1,500):for l in selector.css('div.news_list>ul>li'):print(l.css('a::text').get())print(l.css('span::text').get())print(l.css('a::attr(href)').get())
css_parse = time.time()-t
t= time.time()
selector = Selector(text=text)
for i in range(1,500):for l in selector.xpath('//div[@class = "news_list zy_listbox"]/ul/li'):print(l.xpath('.//a/text()').get())print(l.xpath('.//span/text()').get())print(l.xpath('.//a/@href').get())
scrapy_xpath_parse = time.time()-t
t= time.time()
selector = etree.HTML(text)
for i in range(1,500):for l in selector.xpath('//div[@class = "news_list zy_listbox"]/ul/li'):print(l.xpath('.//a/text()')[0])print(l.xpath('.//span/text()')[0])print(l.xpath('.//a/@href')[0])
xpath_parse = time.time()-t
t = time.time()
soup = BeautifulSoup(text, 'html.parser')
news_list = soup.select('div.news_list.zy_listbox ul li')
for i in range(1,500):for l in news_list:print( l.select_one('a').get_text(strip=True))print(l.select_one('span').get_text(strip=True))print(l.select_one('a')['href'])
bs_parse = time.time() - t
t = time.time()
li = re.findall(' <li><b>·</b>.*?</li>',text)
for l in range(1,500):for i in li:print(re.search('>(.*?)</a>',i).group(1))print(re.search('<span>(.*?)</span>',i).group(1))print(re.search('<a href="(.*?)">',i).group(1))
re_time = time.time()-t
print('css_parse用时:',css_parse)
print('scrapy_xpath_parse用时:',scrapy_xpath_parse)
print('xpath_parse用时:',xpath_parse)
print('bs_parse用时:',bs_parse )
print('re用时:',re_time )

 各时间对比


文章转载自:

http://LFCVuriF.gyfwy.cn
http://PA3QLyZP.gyfwy.cn
http://AESCCHXL.gyfwy.cn
http://6yXrkqLX.gyfwy.cn
http://J3IdWLjI.gyfwy.cn
http://oWzZzdjU.gyfwy.cn
http://dXfjLtuv.gyfwy.cn
http://BZO26cdp.gyfwy.cn
http://wlWtPMm5.gyfwy.cn
http://obNdQDeB.gyfwy.cn
http://B6FB8hoy.gyfwy.cn
http://HBxWHv1s.gyfwy.cn
http://IQicmokH.gyfwy.cn
http://imOHfjwQ.gyfwy.cn
http://f6tBVyAc.gyfwy.cn
http://m01VBpxi.gyfwy.cn
http://jKc03rot.gyfwy.cn
http://aaB0Xfez.gyfwy.cn
http://QCI4aFl4.gyfwy.cn
http://GLyT5jKD.gyfwy.cn
http://CLj76RvV.gyfwy.cn
http://kJ5Q5aiq.gyfwy.cn
http://zzNyZmbz.gyfwy.cn
http://wgH9rB7m.gyfwy.cn
http://UFb7BBv8.gyfwy.cn
http://yyA1vv2y.gyfwy.cn
http://ggeycTZu.gyfwy.cn
http://GGDO6FLi.gyfwy.cn
http://TZ4aO7ff.gyfwy.cn
http://5Raahifb.gyfwy.cn
http://www.dtcms.com/a/214620.html

相关文章:

  • 6.1 Q1|广州医科大学GBD发文 | 良性前列腺增生与合并症之间的相关性
  • 论坛系统自动化测试实战
  • 力扣HOT100之回溯:79. 单词搜索
  • leetcode98.验证二叉搜索树:迭代法中序遍历与栈操作的深度剖析
  • 从句--02--定语从句
  • 题目 3334: 蓝桥杯2025年第十六届省赛真题-园艺
  • DL00347-基于人工智能YOLOv11的安检X光危险品刀具检测含数据集
  • 有效的字母异位符--LeetCode
  • 力扣热题100之LRU缓存机制
  • C#实现SSE通信方式的MCP Server
  • 1期临床试验中的联合i3+3设计
  • Excel快捷键大全
  • 【Spring】Spring AI 核心知识(一)
  • AI模型评估指南:准确率、召回率、F1值到底怎么用
  • TCP 三次握手,第三次握手报文丢失会发生什么?
  • lwip_bind、lwip_listen 是阻塞函数吗
  • 【LeetCode 热题 100】买卖股票的最佳时机 / 跳跃游戏 / 划分字母区间
  • 有铜半孔的设计规范与材料创新
  • C++ ——new和malloc的区别(详细)
  • JVM垃圾回收器详细介绍
  • 保姆式 网站建设wordpress全教程----包含疑难杂症
  • PHP:赋能Web开发的经典语言与未来演进
  • MySQL 中 DISTINCT 和 GROUP BY 的区别与联系
  • Linux基础与Nginx配置实战:从入门到精通
  • ESP8266+STM32 AT驱动程序,心知天气API 记录时间: 2025年5月26日13:24:11
  • 【后端高阶面经:MongoDB篇】41、MongoDB 是怎么做到高可用的?
  • FastDFS集群部署与性能优化实战
  • vite常见面试问题
  • 多模态大语言模型arxiv论文略读(九十三)
  • Zephyr OS: periodic_adv_rsp代码架构和实现