zoukankan      html  css  js  c++  java
  • chardet坑——比蜗牛还慢

    需求

    最近在做一个功能,使用python爬取网页然后保存到本地。其中遇到的一个难题是判断页面的编码方式。有问题就百度喽,当时我没想到自己去解决。一百度就找到了一个叫chardet的插件。大喜过望,试了一下很OK。好了,貌似问题解决了,可是

    为毛我的请求变慢了很多,起初我还以为是python慢,后来一查才知道,chardet这个东西会严重影响速度,即使一个简单的页面,这家伙都要用掉我将近15s的时间去判断页面编码,擦,等的我心痒痒。百度charset效率低的问题,结果没找到。

    难道是我用的方法不对。

    人生啊总是充满了怀疑

    我反复的看chardet的资料,之前查的是官网,找不到网址了。这个网址也凑合http://blog.csdn.net/tianzhu123/article/details/8187470 

    百度,反复试了chardet推荐的方法,结果快是快了一点,由原来的18s变为了12s。看到这个数字我满脸狗血。最近踩了太多坑了,phantom差点把我坑死,berserkJs把我坑个半死。我已经预料到了我已经掉进了chardet的坑里。

    上岸

    俗话说,自己动手丰衣足食,我仰望星空思考了5分钟然后写出来以下代码。虽然不全面,但是已经能够解决了我现在遇到的问题。

    def checkChar(content):
    	start = content.find("charset")
    	end = start+len("charset=")+30;
    	stripStr=content[start:end]
    	charset="utf-8"
    	if(stripStr.lower().find("gb2312")>-1 or stripStr.lower().find("gbk")>-1) :
    		charset="gbk"
    	return charset
    

    总结:开源的东西真是良莠不齐,一不小心我们就会掉坑里,浪费时间浪费生命。所以能自己解决的尽量不要百度。还有以后分享代码,也一定要负责一点,不要再给别人弯路走。

  • 相关阅读:
    线性反馈系统
    静磁场
    平面波的传播
    Partition does not end on cylinder boundary
    FFTW简介及使用
    EINTR、ERESTARTSYS和SIGINT
    凉面
    linux Shell编程
    Linux From Scratch [2]
    Linux From Scratch [1]
  • 原文地址:https://www.cnblogs.com/gg1234/p/6008892.html
Copyright © 2011-2022 走看看