Unicode提取

Unicode extraction

我写了一个从某个网页中提取 url 的代码,我面临的问题是它没有以相同的方式提取 url在网页上,我的意思是如果 URL 是某种法语语言,它不会按原样提取。我该如何解决这个问题?

import requests
from bs4 import BeautifulSoup
for i in range(0,500):
    o=36*i
    r=requests.get('http://www.barneys.com/barneys-new-york/men?start='+str(o)+'&format=page-element&sz=36')
    soup=BeautifulSoup(r.text)
    links=soup.find_all("a",{"class":"thumb-link"})
    for link in links:
        print link.get('href')

URL 是 percent-encoded。例如,在 HTML 中 URL 可能是

http://www.barneys.com/rick-owens-boucl%C3%A9-scarf-504025220.html

但在您的浏览器中 URL 可能 显示

http://www.barneys.com/rick-owens-bouclé-scarf-504025220.html

要解码百分比编码的 URL,请使用 Python2 中的 urllib.unquote 或 Python3 中的 urllib.parse.unquote:

>>> print(urllib.unquote('http://www.barneys.com/rick-owens-boucl%C3%A9-scarf-504025220.html'))
http://www.barneys.com/rick-owens-bouclé-scarf-504025220.html

import requests
from bs4 import BeautifulSoup
try:
    # Python2
    from urllib import unquote
except ImportError:
    # Python3
    from urllib.parse import unquote

for i in range(0,500):
    o=36*i
    r=requests.get('http://www.barneys.com/barneys-new-york/men?start='+str(o)+'&format=page-element&sz=36')
    soup=BeautifulSoup(r.text)
    links=soup.find_all("a",{"class":"thumb-link"})
    for link in links:
        print(unquote(link.get('href')))

在Python3link.getreturns一个unicodestr。 在Python2、link.get returns一个str字节,可以用utf-8解码得到unicode:

print(unquote(link.get('href')).decode('utf-8'))