scrapy中用hashlib.md5 處理 url
在settings同一目錄下,建立package叫 utils,并在其中新建 common.py。
先把hashlib中md5()實(shí)例化。然后用update傳入url。再用 hexdigest() 提取摘要。
# -*- coding:utf-8 -*-
__author__ = "Tim"
import hashlib
def get_md(url):
m = hashlib.md5()
m.update(url)
return m.hexdigest()
if __name__ == "__main__":
print (get_md("http://jobbole.com"))
最終顯示:
unicode不能被hash。這個(gè)函數(shù)在python2中調(diào)用沒(méi)問(wèn)題,因?yàn)閜ython3程序中的編碼是unicode。但是hash.md5()不接受unicode,所以這里encode成utf-8。
Traceback (most recent call last):
File "/Users/macroot/imooc/ArticleSpider/ArticleSpider/utils/common.py", line 13, in <module>
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 hashlib
def get_md(url):
m = hashlib.md5()
m.update(url)
return m.hexdigest()
if __name__ == "__main__":
print (get_md(("http://jobbole.com").encode("utf-8")))
寫(xiě)成如下也可以接受,不打括號(hào)
#...
if __name__ == "__main__":
print (get_md("http://jobbole.com".encode("utf-8")))
結(jié)果
0efdf49af511fd88681529ef8c2e5fbf
判斷傳入值編碼
因?yàn)椴恢纻魅胧鞘裁淳幋a。
python2可以判斷是否是unicode:
if isinstance(url, unicode):
python3中沒(méi)有unicode這個(gè)關(guān)鍵詞了。str這個(gè)關(guān)鍵詞在python3中代表的就是unicode。
# -*- coding:utf-8 -*-
__author__ = "Tim"
import hashlib
def 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"))