数据提取时用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安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 互联网科技卖菜 关于新基建和互联网科技 广州互联网科技公司 互联网科技的发展 金融科技 互联网金融 智慧科技互联网 上海万想互联网科技 互联网养老 桔豆科技 互联网科技博主是什么意思 昭通云南众福互联网科技有限公司 世界互联网科技公司市值排名 长沙茂晟互联网科技有限公司 明优互联网科技有限公司 互联网金融科技元年 图游互联网科技 互联网风格科技公司名称 广州燕处互联网科技有限公司 互联网领先科技活动 高科技和互联网的现代国家 南京欣网互联网络科技有限公司 互联网络科技有限公司 科技服务与互联网 北京禾田雨橡互联网科技 互联网 视角下的科技创新 天下捷融互联网科技 互联网科技公司需要的职位 雨阳互联网卡科技有限公司 陕西云淼互联网科技公司 互联网科技的前景