84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
比如我在采集一个网站的时候,我想直接过滤或是替换掉一些没用的信息,比如QQ 手机 或是 www 开头的东西
数据量小一点还好我可以这样写:
if "http" or "www" or "QQ" or "qq" in content: ....
但是数据量大的话那不是很悲剧?难道要一直or来连接?
最优雅的实现方式是什么?我想能用正则的话肯定是比较好的
因为需要匹配的信息太多了 ,比如QQ号码,网址,电话等这些都要进行查找和替换
人生最曼妙的风景,竟是内心的淡定与从容!
这个取决于你的数据规模,数据规模小,顶多你把关键字存到redis或者什么配置文件中,每次爬下来的数据,都把所有关键字取出来,replace即可。
但是因为你是网络爬虫,如果关键字和需要过滤的字符串又特别大,即使用正则,效率也是很堪忧的。
举个例子,你有100000个关键字需要过滤掉,假设你能将这100000个关键字合并成用50000个正则表达式(是人工写这么多正则还是自动生成正则先不谈),每次爬下来的字符串又特长,至少需要循环50000次才能匹配所有正则。我觉得这种朴素的方法可能就是不可用的了。
仅我个人建议啊,可以参考这篇文章:http://blog.jobbole.com/99910/ 讲的是如何把关键字分段,建立关键词索引达到比较高效的查询的。这个文章是介绍stackoverflow的tag引擎的。
要么建议上ElasticSearch这些重量级的了。。。显然这里端端的几十个字没办法说了。
楼上说的很对,但如果数据小的话可以考虑使用any
a = [1, 2] b = [2, 3] if any(i in b for i in a): pass
这个取决于你的数据规模,数据规模小,顶多你把关键字存到redis或者什么配置文件中,每次爬下来的数据,都把所有关键字取出来,replace即可。
但是因为你是网络爬虫,如果关键字和需要过滤的字符串又特别大,即使用正则,效率也是很堪忧的。
举个例子,你有100000个关键字需要过滤掉,假设你能将这100000个关键字合并成用50000个正则表达式(是人工写这么多正则还是自动生成正则先不谈),每次爬下来的字符串又特长,至少需要循环50000次才能匹配所有正则。我觉得这种朴素的方法可能就是不可用的了。
仅我个人建议啊,可以参考这篇文章:http://blog.jobbole.com/99910/ 讲的是如何把关键字分段,建立关键词索引达到比较高效的查询的。这个文章是介绍stackoverflow的tag引擎的。
要么建议上ElasticSearch这些重量级的了。。。显然这里端端的几十个字没办法说了。
楼上说的很对,但如果数据小的话可以考虑使用any