更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
发布时间:2020-02-17 来源:西安鲲之鹏官微
【经验分享】一例正则表达式效率低问题的分析
一直以来都觉得正则表达式的效率非常高,今天遇到一例正则匹配耗时特长的情况,mark一下。
目标是判断目标网页(大小约350KB)中是否有符合以下要求的子串:
"至少要有一个不为'的字符<div class="tips_unresult">"
想当然的写出了如下的代码:
re.compile(r'[^\']+<div[^<>]+class="tips_unresult">').search(html)
测试的时候发现这一步耗时特别长,记了一下时,竟然花了差不多10秒,很是诧异。
后来试着修改了下正则式,如下:
re.compile(r'[^\']<div[^<>]+class="tips_unresult">').search(html)
和第一次的相比,区别在于:这里只匹配"<div..."前面有一个非'字符即可,而第一步是匹配"<div..."前面有一个或多个非'字符。
这次只用了0.004秒,结果相差了1600多倍!
PS:第一次的那个代码在以往一个的爬虫中曾执行过70多万次,以前竟然没有发现问题,还以为时间都花在webkit加载页面上了...这样一算竟然多花了近一周的时间。
独立的测试代码和运行截图如附图所示。
一直以来都觉得正则表达式的效率非常高,今天遇到一例正则匹配耗时特长的情况,mark一下。
目标是判断目标网页(大小约350KB)中是否有符合以下要求的子串:
"至少要有一个不为'的字符<div class="tips_unresult">"
想当然的写出了如下的代码:
re.compile(r'[^\']+<div[^<>]+class="tips_unresult">').search(html)
测试的时候发现这一步耗时特别长,记了一下时,竟然花了差不多10秒,很是诧异。
后来试着修改了下正则式,如下:
re.compile(r'[^\']<div[^<>]+class="tips_unresult">').search(html)
和第一次的相比,区别在于:这里只匹配"<div..."前面有一个非'字符即可,而第一步是匹配"<div..."前面有一个或多个非'字符。
这次只用了0.004秒,结果相差了1600多倍!
PS:第一次的那个代码在以往一个的爬虫中曾执行过70多万次,以前竟然没有发现问题,还以为时间都花在webkit加载页面上了...这样一算竟然多花了近一周的时间。
独立的测试代码和运行截图如附图所示。
特别说明:该文章为鲲鹏数据原创内容 ,您除了可以发表评论外,还可以转载到别的网站,但是请保留源地址,谢谢!!(尊重他人劳动,我们共同努力)
☹ Disqus被Qiang了,之前的评论内容都没了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/