scrapy中用hashlib.md5 处理 url

scrapy中用hashlib.md5 处理 url

在settings同一目录下,建立package叫 utils,并在其中新建 common.py

先把hashlib中md5()实例化。然后用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。这个函数在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 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")))

写成如下也可以接受,不打括号

#...
if __name__ == "__main__":
    print (get_md("http://jobbole.com".encode("utf-8")))

结果

0efdf49af511fd88681529ef8c2e5fbf

判断传入值编码

因为不知道传入是什么编码。

python2可以判断是否是unicode:

if isinstance(url, unicode):

python3中没有unicode这个关键词了。str这个关键词在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"))

你可能感兴趣的:(scrapy中用hashlib.md5 处理 url)