返回顶部
首页 > 资讯 > 精选 >数据提取时用xpath还是正则表达式呢
  • 783
分享到

数据提取时用xpath还是正则表达式呢

2023-06-02 23:06:24 783人浏览 八月长安
摘要

这篇文章给大家分享的是有关数据提取时用xpath还是正则表达式呢的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xpath和正则表达式是数据提取时最常用的两种方法,究竟用哪个好呢?测试代码如下所示,实验目标是同一h

这篇文章给大家分享的是有关数据提取时用xpath还是正则表达式呢的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

xpath和正则表达式是数据提取时最常用的两种方法,究竟用哪个好呢?

测试代码如下所示,实验目标是同一html文档,分别使用WEBscrpaing库中的xpath,lxml库中的xpath以及正则表达式提取100次,统计各方法的用时:

view plaincopy to clipboardprint?

  1. coding: utf-8  

  2. # xpath_speed_test.py  

  3.   

  4. import re  

  5. import time  

  6. from lxml import etree  

  7. from webscraping import common, download, xpath  

  8.   

  9. TEST_TIMES = 100  

  10.   

  11. def test():  

  12.     url = 'Http://hotels.ctrip.com/international/washington26363'  

  13.     html = download.Download().get(url)  

  14.     html = common.to_unicode(html)  

  15.       

  16.     # 测试webscraping库的xpath提取速度  

  17.     start_time = time.time()  

  18.     for i in range(TEST_TIMES):  

  19.         for hid, hprice in zip(xpath.search(html, '//div[@class="hlist_item"]/@id'), xpath.search(html, '//div[@class="hlist_item_price"]/span')):  

  20.             #print hid, hprice  

  21.             pass  

  22.     end_time = time.time()  

  23.     webscraping_xpath_time_used = end_time - start_time  

  24.     print '"webscraping.xpath" time used: {} seconds.'.fORMat(webscraping_xpath_time_used)  

  25.       

  26.       

  27.     # 测试lxml库xpath提取速度  

  28.     start_time = time.time()  

  29.     for i in range(TEST_TIMES):  

  30.         root = etree.HTML(html)  

  31.         for hlist_div in root.xpath('//div[@class="hlist_item"]'):  

  32.             hid = hlist_div.get('id')  

  33.             hprice = hlist_div.xpath('.//div[@class="hlist_item_price"]/span')[].text  

  34.             #print hid, hprice  

  35.             pass  

  36.     end_time = time.time()  

  37.     lxml_time_used = end_time - start_time  

  38.     print '"lxml" time used: {} seconds.'.format(lxml_time_used)  

  39.       

  40.     # 测试正则表达式的速度  

  41.     start_time = time.time()  

  42.     for i in range(TEST_TIMES):  

  43.         for hid, hprice in zip(re.compile(r'class="hlist_item" id="(\d+)"').findall(html), re.compile(r'<div class="hlist_item_price"><dfn>&yen;</dfn><span>([\d\.]+)</span>').findall(html)):  

  44.             #print hid, hprice  

  45.             pass  

  46.     end_time = time.time()  

  47.     re_time_used = end_time - start_time  

  48.     print '"re" time used: {} seconds.'.format(re_time_used)  

  49.       

  50.       

  51. if __name__ == '__main__':  

  52.     test()  

运行结果如下:

数据提取时用xpath还是正则表达式呢

view plaincopy to clipboardprint?

  1. "webscraping.xpath" time used: 100.677000046 seconds.  

  2. "lxml" time used: 2.09100008011 seconds.  

  3. "re" time used: 0.138999938965 seconds.  

结果很震撼:

  • 正则表达式只用了0.14秒;

  • lxml的xpath用了2.1秒;

  • webscraping的xpath用了101秒!

由于xpath简单而且灵活,我们在爬虫开发的时候一般都会首选,但是通过这个实验发现它的效率远低于正则表达式,尤其是webscrpaing库中的xpath速度更是慢得恐怖。

因此,在我们的爬虫开发过程中,应该首选正则表达式,如果用正则表达式实在难于实现,再考虑xpath,另外,在使用xpath的时候一定要选用高效的库,比如lxml。特别是在数据量特别大的时候,效率显得尤为重要。

感谢各位的阅读!关于“数据提取时用xpath还是正则表达式呢”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 数据提取时用xpath还是正则表达式呢

本文链接: https://lsjlt.com/news/231638.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 数据提取时用xpath还是正则表达式呢
    这篇文章给大家分享的是有关数据提取时用xpath还是正则表达式呢的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xpath和正则表达式是数据提取时最常用的两种方法,究竟用哪个好呢?测试代码如下所示,实验目标是同一H...
    99+
    2023-06-02
  • python中如何使用正则表达式提取数据
    目录常用正则表达式实例re.compile 函数方括号-匹配几个字符之一切割字符串字符串替换匹配模式替换指定替换函数总结正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串...
    99+
    2023-02-06
    python使用正则表达式 python提取数据 使用正则表达式
  • 如何在 Golang 中使用正则表达式提取数据?
    正则表达式在 go 中可用于提取数据,使用 regexp 包处理正则表达式:编译正则表达式:regexp.compile("匹配模式")使用 find 或 findall 函数提取数据:...
    99+
    2024-05-13
    golang 正则表达式 提取数据
  • jmeter正则表达式提取器的用法与正则详解
    我们再使用jmeter请求接口时,碰到一些业务流程性的接口改怎么办,比如,我一个发布内容的接口需要用到登录接口返回的token加到请求上去才能发布内容,那在jmeter上该是如何实现...
    99+
    2024-04-02
  • 教你用正则表达式提取数字和小数点
    目录1、初识1.1、纯数字提取1.2、带有小数点数字提取2、语法3、实例代码4、参考Demo总结1、初识 1.1、纯数字提取 -- "提取123abc提取":提取当前字符当中的123...
    99+
    2024-04-02
  • python利用正则表达式提取字符串
    前言 正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串。日志分析会遇到这种情况,下面我会分别讲一下对应的方法。...
    99+
    2022-06-04
    字符串 正则表达式 python
  • jmeter正则表达式提取器怎么使用
    这篇文章主要介绍“jmeter正则表达式提取器怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jmeter正则表达式提取器怎么使用”文章能帮助大家解决问题。使用方法1,把正则表达式添加到需要提...
    99+
    2023-07-02
  • mysql 正则表达式 提取 指定字符
    目录 1.REGEXP 正则表达式2.REGEXP_REPLACE3.补充参考链接 1.REGEXP 正则表达式 # 查找字段中包含数字和字母的所有记录 SELECT 字段1 FROM 表1 where 字段1 R...
    99+
    2023-08-25
    mysql 正则表达式 数据库
  • Python利用正则表达式从字符串提取数字
    目录前言利用正则表达式从字符串提取数字附python正则表达式抽取文本中的时间日期总结前言 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Pyt...
    99+
    2024-04-02
  • 在python正则表达式中是怎样正确使用正则表达式
    这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python...
    99+
    2023-06-17
  • python如何用正则表达式提取字符串
    目录用正则表达式提取字符串1. 单个位置的字符串提取2. 连续多个位置的字符串提取用正则表达式提取字符串中的整数总结用正则表达式提取字符串 在日常工作中经常遇见在文本中提取特定位置字...
    99+
    2023-03-02
    python正则表达式 python提取字符串 正则提取字符串
  • Jmeter中正则表达式提取器使用详解
    目录在使用Jmeter过程中,会经常使用到正则表达式提取器提取器,虽然并不直接涉及到请求的测试,但是对于数据的传递起着很大的作用,本篇博文就是主要讲解关于正则表达式及其在Jmeter...
    99+
    2024-04-02
  • python怎么用正则表达式提取字符串
    今天小编给大家分享一下python怎么用正则表达式提取字符串的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。用正则表达式提取字...
    99+
    2023-07-05
  • python用正则表达式提取/匹配中文汉字
    目录python用正则表达式提取中文python正则如何匹配中文汉字总结python用正则表达式提取中文 Python re正则匹配中文,其实非常简单,把中文的unicode字符串转...
    99+
    2024-04-02
  • 只能输入正整数的正则表达式及常用的正则表达式
    只能输入正整数的正则表达式:^[1-9]\d*$常用的正则表达式:1. 匹配手机号码:^[1][3,4,5,7,8,9]\d{9}$...
    99+
    2023-08-16
    正则表达式
  • 如何用正则表达式从 Golang 字符串中提取数字?
    使用正则表达式从 golang 字符串中提取数字:正则表达式语法:[0-9]+ 匹配一个或多个十进制数字。使用 regexp 包:导入 regexp 包并编译正则表达式。使用 finda...
    99+
    2024-05-13
    golang 正则表达式 iphone
  • MySQL数据库——MySQL REGEXP:正则表达式
    正则表达式主要用来查询和替换符合某个模式(规则)的文本内容。例如,从一个文件中提取电话号码,查找一篇文章中重复的单词、替换文章中的敏感语汇等,这些地方都可以使用正则表达式。正则表达式强大且灵活,常用于非常复杂的查询。 MySQL 中,使用 ...
    99+
    2023-09-01
    正则表达式 数据库 mysql
  • Python中怎么使用正则表达式及正则表达式匹配规则是什么
    1 导库import re2 使用模板re_pattern = re.compile(pattern, flags=0) result = re.findall(re_pattern,string)3 说明参数描述pattern匹配的正则表...
    99+
    2023-05-14
    Python
  • #php 正则表达式,读取括号里的数据,全文读取
    #php 正则表达式,读取括号里的数据,全文读取 $str="口腔健康是很多人关注的一个话题,我们都知道一天要刷两次牙, 可以预防口腔疾病,也能让口气清新。{第一段:2.45} 每个...
    99+
    2023-09-07
    php
  • java如何用正则表达式匹配与提取字符串
    java.util.regex类支持用正则表达式来匹配和提取字符串,读者可以去官网查看java.util.regex的详细使用方法。 首先给出一个匹配字符串的例子(判断line是否符...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作