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