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

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

时间: 2024-10-11 05:09:30

chardet坑——比蜗牛还慢的相关文章

js与坑第二天——还好

1.符号运算 +     字符串拼接 .       表示    "···的" 对于点运算   点前面的叫对象   点后面的叫属性和方法. 属性和方法的区别? 1.a.length      length  是属性 2. a.way()            way()是方法 2.条件语句 如果···否则···       if···else··· if(条件){ 执行模块一 }  else{ 执行模块二 } 3.多个条件 这种排版是错误的,应该从大到小排 4.三元(目)运算 条件?语

跳入linux的第一个坑-因为安装Ubuntu导致的硬盘被误格的恢复.(记TestDisk使用记录)

不看废话,直接跳到操作说明 前几日心血来潮想把家中的旧笔记本换成Linux操作系统,算是在业余生活中正式投入Linux的怀抱.说干就干,发行版选择了Ubuntu,下载了Ubuntu16.04的ISO,下载软碟通,制作成U盘启动.恩,重启电脑,U盘引导,进入安装界面. 恩,安装界面挺炫酷啊,还检测到硬盘中安装的Win8,恩,问我是与其他系统共存还是清除并安装,既然都正式投入怀抱了,肯定只安装Ubuntu啊,Win8,拜拜了,恩,选第二个.下图是网上找的.请注意第二个选项的注意:..算了,我就是看到

HDU5003:Osu!(签到题)HDU5038:(签到题,题意很坑)

HDU 5003 水题,直接上代码(因为题意读错了,WA了一遍). #include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> typedef long long ll; #define inf 0x3f3f3f3f #define mod 7 #include <math.h> #include <queue> using names

bottle的几个小坑

距离我在<web.py应用工具库:webpyext>里说要换用bottle,已经过去快两个月了--事实上在那之前我已经開始着手在换了.眼下那个用于 Backbone.js 介绍的样例程序已经完毕更换,其他一些原来基于web.py的应用也在逐步重写中.期间各种小坑不断,还好至今还没有碰到什么大坑--只是目測应该也不会有大坑. unicode 作为非英文应用的开发人员,unicode是一个绕只是去的坑. web.py 对此是不作处理的,全都按原编码方式处理. bottle 则作了一个有点奇怪的处理

Jackson中的那些坑

不符合驼峰规范的变量 “驼峰命名法”请自行百度.简单的来说就是变量的第一个单词以小写字母开始其他单词首字母大写,或者全部单词首字母都大写,分别称为“小驼峰”和“大驼峰” 比如一个符合驼峰规范命名的实体: public class Entity { String beFlag; public String getBeFlag() { return beFlag; } public void setBeFlag(String beFlag) { beFlag = beFlag; } } 转化的JSO

dropload.js(上拉加载插件使用过程中遇到的坑)

dropload.js相关介绍和使用以及demo下载详见:https://github.com/ximan/dropload (原文出处) 之前因为项目需要一个上拉加载的效果,然后无意中看到了此插件,用了之后感觉挺好用的,就是坑太多,下面列出一些我在实际使用中遇到的问题. 注:如果在使用该插件的时候遇到问题,确实无法解决,也没有人能帮你解决,建议换插件或者加群,群号也在上面的链接里面. 问题1:给某个元素(比如查询按钮)加上onclick事件以后,不管点几次,加载效果也会增加几个,如下图所示 解

cocos2dx 3.3final UserDefault有个坑?

今天在写数据的时候,与同事的想法有点不一样,让我产生的疑问,没想到貌似发现一个坑! 同事存数据是直接调用UserDefault::getInstance()->setStringForKey(key, value);没有加flush...我就纳闷了,后来网上查资料,多亏下面两篇文章: UserDefault存储数据问题 cocos2dx 3.2 的UserDefault 项目中 cocos2d\cocos\base 路径下看看,就知道答案了.    因为你会发现那里有:CCUserDefault

动物-软体动物:蜗牛

ylbtech-动物-软体动物:蜗牛 蜗牛是指腹足纲的陆生所有种类.一般西方语言中不区分水生的螺类和陆生的蜗牛,汉语中蜗牛只指陆生种类,而广义的蜗牛还包括巨盾蛞蝓.蜗牛是一种包括许多不同科.属的动物.取食植物,产卵于土中或者树上.在热带岛屿比较常见,但有的也生存在寒冷地区.树栖种类的色泽鲜艳,而地栖的通常几种接近的颜色,一般有条纹.非洲的水晶螺属体型最大,多超过20公分.欧洲的大蜗牛属的几个种常作佳肴,尤其在法国.蜗牛是陆地上最常见的软体动物,其具有很高的食用和药用价值. 1.返回顶部 1. 中

空心菜老师的世界观

< 希  望>   前  言 还从来没有什么东西,能给人类社会带来如此巨大的变化,除了科学. 科学改变了人类的认知.在科学出现之前,人们普遍相信神灵的存在,认为是神灵在主宰着世界.但科学引发了人们观念的大转变,无神论.唯物论.进化论成为了人们世界观中的主流思想. 科学改变了人类的能力.在科学技术的帮助下,人类变得空前强大,成功地占领了这个星球.自然界那些我们曾经的天敌,老虎.狮子.猎豹.豺狼,此时不是在野外狭窄的生存空间中苟延残喘,就是老老实实在动物园的笼子里晒太阳.人类战胜了天敌,战胜了饥饿