scrapy中用hashlib.md5|scrapy中用hashlib.md5 处理 url

scrapy中用hashlib.md5 处理 url 在settings同一目录下,建立package叫 utils,并在其中新建 common.py
先把hashlib中md5()实例化。然后用update传入url。再用 hexdigest() 提取摘要。

# -*- coding:utf-8 -*- __author__ = "Tim" import hashlibdef get_md(url): m = hashlib.md5() m.update(url) return m.hexdigest()if __name__ == "__main__": print (get_md("http://jobbole.com"))

最终显示:
unicode不能被hash。这个函数在python2中调用没问题,因为python3程序中的编码是unicode。但是hash.md5()不接受unicode,所以这里encode成utf-8
Traceback (most recent call last): File "/Users/macroot/imooc/ArticleSpider/ArticleSpider/utils/common.py", line 13, in print (get_md("http://jobbole.com")) File "/Users/macroot/imooc/ArticleSpider/ArticleSpider/utils/common.py", line 8, in get_md m.update(url) TypeError: Unicode-objects must be encoded before hashing

# -*- coding:utf-8 -*- __author__ = "Tim" import hashlibdef get_md(url): m = hashlib.md5() m.update(url) return m.hexdigest()if __name__ == "__main__": print (get_md(("http://jobbole.com").encode("utf-8")))

写成如下也可以接受,不打括号
#... if __name__ == "__main__": print (get_md("http://jobbole.com".encode("utf-8")))

结果
0efdf49af511fd88681529ef8c2e5fbf

判断传入值编码 因为不知道传入是什么编码。
python2可以判断是否是unicode:
if isinstance(url, unicode):

【scrapy中用hashlib.md5|scrapy中用hashlib.md5 处理 url】python3中没有unicode这个关键词了。str这个关键词在python3中代表的就是unicode。
# -*- coding:utf-8 -*- __author__ = "Tim" import hashlibdef get_md(url): if isinstance(url, str): url = url.encode("utf-8")m = hashlib.md5() m.update(url) return m.hexdigest()if __name__ == "__main__": print (get_md("http://jobbole.com"))

    推荐阅读