网络搜寻器可以区分编码吗?
我正在构建一个搜寻器以收集一些数据。但是,看来我搜索的网站编码不正确;字符集是utf-8,但其中一些文本似乎在latin-1中。
作为示例,您可以运行下面的代码。我将使用两个都有特殊字符的波兰语名称和西班牙语名称作为示例。 如果我复制粘贴并打印它们,则utf-8中的IDE可以正确打印它们。 但是,如果我从网站上刮取,Adrian的名字将无法正确打印。但是,如果我将字符串编码为latin-1,就可以。
因此,我想网站上的某些文本不是utf-8,而是拉丁文1。问题是如何告诉我的搜寻器是否需要在latin-1中对文本进行编码?如果我尝试对所有内容进行编码,则诸如Pawel的返回错误之类的名称。我应该使用try / else吗?
# coding = utf-8
from bs4 import BeautifulSoup
import requests
user_agent = {'User-agent': 'Mozilla/5.0'}
def download_soup(url):
response = requests.get(url, headers=user_agent)
page = response.text
soup = BeautifulSoup(page, 'lxml')
return soup
print('utf-8 : Paweł Cieślik')
print('utf-8 : Adrián González')
pawel_soup = download_soup('https://www.procyclingstats.com/rider/pawel-cieslik').find('title').text
adrian_soup = download_soup('https://www.procyclingstats.com/rider/adrian-gonzalez').find('title').text
print('web original encoding : '+pawel_soup)
print('web original encoding : '+adrian_soup)
print('web latin encoding : '+adrian_soup.encode('latin-1').decode('utf-8'))
返回
utf-8 : Paweł Cieślik
utf-8 : Adrián González
web original encoding : Paweł Cieślik
web original encoding : Adrián González
web latin encoding : Adrián González
答案 0 :(得分:0)
对于尝试通过latin-1编码unicode时出现的错误,可以传递参数以将其忽略:
pawel_soup.encode('latin-1', errors='ignore').decode('utf-8')