Python

Python抓取网页时GBK编码转UTF-8

用chardet模块检测出网页是ISO-8859-2的编码,西欧语言,这明显是不正确的,推测可能是网页中包含的某些特殊字符造成检测结果出错。

直接使用html.decode(‘gbk’).encode(‘utf-8’)则报错,那么可以简单地加一个参数让解码过程中出现错误自动忽略,即html.decode(‘gbk’, ‘ignore’).encode(‘utf-8’)

中文便能正确显示了。

Python中SQLite获取cursor.rowcount始终-1的解释

在Python实现的DB API中,rowcount属性“当在特定类型数据库接口未实现cursor的rowcount属性时会返回-1”,sqlite就属于这种情况。

搜了一下,有个人说调用一次fetchall()就会自动更新rowcount的值,这是自己胡编臆造的。

替代的解决方法是使用SQLite中内置的计数函数:

SELECT COUNT(*) FROM TABLE

然后fetchone()即可获得总条数。

Python中用hashlib获取中文字符串MD5的正确方法

版本是2.7.5。调试的时候始终在hashlib求md5的时候出错,但捕捉到的错误又没有错误信息。

找半天发现原来中文的字符串值在使用hashlib.md5()时,需要首先进行一次显式的编码转换(因为不同编码的情况下,二进制的md5值是不同的),明确告知hashlib你要使用的编码类型。

所以下面的语句是正确的:

result=hashlib.md5(czstr.encode(‘gb2312’)).hexdigest()
result=hashlib.md5(czstr.encode(‘utf8’)).hexdigest()

 

Python中把str转list的方法

因为在用pyv8跑网页里的js,但是js返回的结果数组传递到了python中就变成了连在一起的str。

py_str

 

于是需要转成list,该怎么搞捏?

result = func() #假设func就是js函数
exec ‘lst=%s’%result
for item in lst:
print item

以下是结果:

py_list

BeautifulSoup中findAll和find_all是否有区别

在一个爬虫代码里看到这两种用法,一直不敢确定它们是否一致,搜了一下。

The methods are exactly the same; the mixed-case versions (findAll, findAllNext,nextSibling, etc.) have all been renamed to conform to the Python style guide, but the old names are still available to make porting easier. See Method Names for a full list.

In new code, you should use the lowercase versions, so find_all, etc.
嗯,翻译下大致的意思
这两个方法是完全相同的。大小写混合的版本(比如findAll,findAllNext,nextSibing)已经全部重命名以便适应《Python样式向导》,不过为了方便起见,老的名字仍然可用。完整的列表可以参考《方法名》。

在新代码中,你应该使用小写版本,就像find_all这样的。