数据提取时用xpath还是正则表达式呢
这篇文章给大家分享的是有关数据提取时用xpath还是正则表达式呢的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
xpath和正则表达式是数据提取时最常用的两种方法,究竟用哪个好呢?
测试代码如下所示,实验目标是同一HTML文档,分别使用webscrpaing库中的xpath,lxml库中的xpath以及正则表达式提取100次,统计各方法的用时:
view plain copy to clipboard print ?
# coding: utf-8
# xpath_speed_test.py
import re
import time
from lxml import etree
from webscraping import common, download, xpath
TEST_TIMES = 100
def test():
url = 'http://hotels.ctrip.com/international/washington26363'
html = download.Download().get(url)
html = common.to_unicode(html)
# 测试webscraping库的xpath提取速度
start_time = time.time()
for i in range(TEST_TIMES):
for hid, hprice in zip(xpath.search(html, '//div[@class="hlist_item"]/@id'), xpath.search(html, '//div[@class="hlist_item_price"]/span')):
#print hid, hprice
pass
end_time = time.time()
webscraping_xpath_time_used = end_time - start_time
print '"webscraping.xpath" time used: {} seconds.'.format(webscraping_xpath_time_used)
# 测试lxml库xpath提取速度
start_time = time.time()
for i in range(TEST_TIMES):
root = etree.HTML(html)
for hlist_div in root.xpath('//div[@class="hlist_item"]'):
hid = hlist_div.get('id')
hprice = hlist_div.xpath('.//div[@class="hlist_item_price"]/span')[].text
#print hid, hprice
pass
end_time = time.time()
lxml_time_used = end_time - start_time
print '"lxml" time used: {} seconds.'.format(lxml_time_used)
# 测试正则表达式的速度
start_time = time.time()
for i in range(TEST_TIMES):
for hid, hprice in zip(re.compile(r'class="hlist_item" id="(\d+)"').findall(html), re.compile(r'
¥([\d\.]+)').findall(html)):#print hid, hprice
pass
end_time = time.time()
re_time_used = end_time - start_time
print '"re" time used: {} seconds.'.format(re_time_used)
if __name__ == '__main__':
test()
运行结果如下:
view plain copy to clipboard print ?
"webscraping.xpath" time used: 100.677000046 seconds.
"lxml" time used: 2.09100008011 seconds.
"re" time used: 0.138999938965 seconds.
结果很震撼:
正则表达式只用了0.14秒;
lxml的xpath用了2.1秒;
webscraping的xpath用了101秒!
由于xpath简单而且灵活,我们在爬虫开发的时候一般都会首选,但是通过这个实验发现它的效率远低于正则表达式,尤其是webscrpaing库中的xpath速度更是慢得恐怖。
因此,在我们的爬虫开发过程中,应该首选正则表达式,如果用正则表达式实在难于实现,再考虑xpath,另外,在使用xpath的时候一定要选用高效的库,比如lxml。特别是在数据量特别大的时候,效率显得尤为重要。
感谢各位的阅读!关于"数据提取时用xpath还是正则表达式呢"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
正则 表达式 数据 速度 测试 时候 还是 内容 效率 更多 爬虫 篇文章 结果 实验 开发 不错 实用 恐怖 重要 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库考研复试计算题 广播电视技术能手 网络安全 计算机网络技术基础考点总结 路由器转发信息数据库 数据库系统设计与原理 机房网络安全信息演练 鱼卡服务器安全检查 互联网软件开发案例 公共卫生网络安全 服务器bug日志怎么分析 虹口区品质软件开发诚信经营 火星大气数据库 四叶草网络安全有限公司马坤 徐汇区技术网络技术备案 数据库业务审批 周鸿伟谈网络安全 旧服务器安全防护 计算机网络技术考纲春考 avast网络安全版 2020网络安全情报 数据库热备方案 傲世西游有几种服务器 网络安全生态指数2021 数据库怎样配置 无法连接到服务器怎样连接网络 全光网络技术的优缺点 通用应用软件开发 宁夏中国网络安全基地 s开头的远程服务器管理原件 深圳第三方软件开发哪家可靠