网页爬虫 - python如何优雅的进行字符过滤?
黄舟
黄舟 2017-04-18 10:15:45
0
2
463

比如我在采集一个网站的时候,我想直接过滤或是替换掉一些没用的信息,比如QQ 手机 或是 www 开头的东西

数据量小一点还好我可以这样写:

if "http" or "www" or "QQ" or "qq" in content:
    ....

但是数据量大的话那不是很悲剧?
难道要一直or来连接?

最优雅的实现方式是什么?我想能用正则的话肯定是比较好的

因为需要匹配的信息太多了 ,比如QQ号码,网址,电话等这些都要进行查找和替换

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(2)
伊谢尔伦

這個取決於你的數據規模,數據規模小,頂多你把關鍵字存到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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!