【Python实战】对比各种数据解析库的速度

文章目录

  • 前言
  • 操作思路:
  • 代码如下
  • 运行结果

前言

嗨嗨大家晚上好!今天给大家分享一篇文章,来教你们对比python中的各种数据解析库的速度

本文以一个小说网站页面为例,提取里面的网址和各章节的名称

将各种数据库解析的速度进行对比,对比对象以下4种方式:

1>>>正则表达式

2>>>BeautifulSoup(忽略其中的css选择器需调用的select方法)

3>>>parsel(包含使用xpath提取和css选择器提取)

4>>>lxml库etree模块XPath

对比速度时, >表示 速度快于 >>表示速度远快于 =表示速度差不多

操作思路:

1>>>下载一个小说网页后保存为html格式文件,

2>>>依次用不同的解析数据工具提取所需数据并记录耗时.

3>>>模拟对提取到的数据(url和章节名称)进行字符串操作(网址拼接,章节名替换之类的),记录耗时

4>>>将步骤2的耗时数据与步骤3的耗时数据依次对比

【Python实战】对比各种数据解析库的速度_第1张图片

【Python实战】对比各种数据解析库的速度_第2张图片

代码如下

需要源码、教程,或者是自己有关python不懂的问题,都可以来这里哦 https://jq.qq.com/?_wv=1027&k=rdIEl7BP 这里还有学习资料与免费课程领取

import time
import re
from bs4 import BeautifulSoup
from parsel import Selector
from lxml import etree
 
def fnc(): #正则提取
    with open("d:/爬虫/1.html",'r',encoding='utf-8') as f:
 
        href = re.findall(r'
(第.*?)',f.read(),re.S) for i in href: href = i[0] chapter = i[1] def fnc1(): #parser库css提取 with open("d:/爬虫/1.html",'r',encoding='utf-8') as f: se = Selector(f.read()) chapter = se.css('.box_con a::text').getall()[16:] href = se.css('.box_con a::attr(href)').getall()[22:] # href = se.css('.box_con a').re('href="(.*?)">(第.*?)') # css结合正则会更加耗时,大约是原来耗时的双倍 def fnc2(): #parser库xpath提取 with open("d:/爬虫/1.html", 'r', encoding='utf-8') as f: se = Selector(f.read()) chapter = se.xpath('//*[@id="list"]/dl/dd/a/text()').getall() href = se.xpath('//*[@id="list"]/dl/dd/a/@href').getall() def fnc3(): #BeautifulSoup提取 with open("d:/爬虫/1.html", 'r', encoding='utf-8') as f: soup = BeautifulSoup(f.read(),"lxml") href = soup.find('div',id ='list').find_all('a') for i in href: href = i['href'] chapter = i.text def fnc4(): #lxml库etree模块xpath提取 with open("d:/爬虫/1.html", 'r', encoding='utf-8') as f: html = etree.HTML(f.read()) chapter = html.xpath('//*[@id="list"]/dl/dd/a/text()') href = html.xpath('//*[@id="list"]/dl/dd/a/@href') def k(): #模拟对提取到的数据,进行字符串操作 for i in zip(range(10000),range(10000)): ii = ''.join(str(i)) if __name__ == '__main__': t1 = time.time() fnc() t2 = time.time() print('正则提取数据所需时间',t2-t1) fnc1() t3 = time.time() print('parser解析库采用css选择器提取数据所需时间',t3 - t2) fnc2() t4 = time.time() print('parser解析库采用xpath选择器提取数据所需时间',t4 - t3) fnc3() t5 = time.time() print('BeautifulSoup解析库提取数据所需时间', t5 - t4) fnc4() t6 = time.time() print('etree使用xptah提取数据所需时间', t6 - t5) k() t7 = time.time() print('模拟从提取到的数据列表取出取出元素所需的时间',t7-t6) tim = [(t2-t1), (t3 - t2), (t4 - t3), (t5 - t4), (t6 - t5), (t7-t6)] ratio = [([1/_ for _ in tim][5]) / _ for _ in [1/_ for _ in tim]][:-1] print(ratio) ratio1 = [round(([1/_ for _ in tim][5])/_, 1) for _ in [1 / _ for _ in tim]][:-1] print(ratio1) #去掉ratio就不准了

运行结果

需要源码、教程,或者是自己有关python不懂的问题,都可以来这里哦 https://jq.qq.com/?_wv=1027&k=rdIEl7BP 这里还有学习资料与免费课程领取

正则提取数据所需时间 0.01699995994567871
parser解析库采用css选择器提取数据所需时间 0.12699675559997559
parser解析库采用xpath选择器提取数据所需时间 0.1300044059753418
BeautifulSoup解析库提取数据所需时间 0.27150392532348633
etree使用xptah提取数据所需时间 0.10106706619262695
模拟从提取到的数据列表取出取出元素所需的时间 0.007998228073120117
[2.1254657644498764, 15.878111306525174, 16.254150892777297, 33.94550928548007, 12.63618207291263]
[2.1, 15.9, 16.3, 33.9, 12.6]

对提取出的数据进行字符串操作耗时最快(如果列表数据元素为10万个,速度是原来的1/10)

正则 >> etree(xpath) = parser(xpath) > parser(css) >> BeautifulSoup

再重复代码15次,比例结果保留2位小数点为:

正则 ps(css) ps(xpath) BS4 etree(xpath)
[2.1,  15.9,  16.3,  33.9,  12.6]   第一次
[2.1,  13.3,  12.6,  41.7,  10.7]
[1.4,  14.7,  14.1,  38.2,  11.9]
[1.1,  12.6,  11.9,  32.8,  9.9]
[2.0,  16.0,  18.8,  43.2,  11.5]
[1.7,  14.4,  16.1,  43.6,  12.9]
[2.0,  13.6,  14.1,  39.6,  13.1]
[1.7,  13.8,  14.9,  50.0,  14.3]
[1.3,  10.7,  11.9,  32.2,  9.9]
[2.4,  11.5,  11.5,  33.4,  13.2]
[2.0,  11.1,  11.5,  38.1,  11.4]   
[2.0,  11.1,  11.5,  38.1,  11.4]
[1.7,  17.9,  17.0,  32.6,  9.9]
[1.9,  13.8,  15.4,  36.1,  10.5]
[1.5,  12.2,  12.2,  31.9,  10.1]
[1.7,  15.3,  14.8,  40.1,  11.4]
[1.9,  13.2,  13.7,  39.9,  10.3]   第十六次

可以看到,结果跟上面的得到的比例结果,正则和BeautifulSoup速度毫无争议

至此,可以宣布:

对于提取网页源代码的数据速度

正则 >>[ etree(xpath),parser(xpath), parser(css)] >> BeautifulSoup

好啦,今天的分享到这里就结束了 ~
对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

【Python实战】对比各种数据解析库的速度_第3张图片

你可能感兴趣的:(python实战性项目,python,开发语言)