gpt4 book ai didi

python - 抓取网页时如何处理未知编码?

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:18 25 4
gpt4 key购买 nike

<分区>

我正在使用 GAE 和 Python 从各个站点抓取新闻文章。

我一次抓取一篇文章 url 的代码导致以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 8858: ordinal not in range(128)

这是我的最简单形式的代码:

from google.appengine.api import urlfetch

def fetch(url):
headers = {'User-Agent' : "Chrome/11.0.696.16"}
result = urlfetch.fetch(url,headers)
if result.status_code == 200:
return result.content

这是我尝试过的另一种变体,结果相同:

def fetch(url):
headers = {'User-Agent' : "Chrome/11.0.696.16"}
result = urlfetch.fetch(url,headers)
if result.status_code == 200:
s = result.content
s = s.decode('utf-8')
s = s.encode('utf-8')
s = unicode(s,'utf-8')
return s

这是丑陋的、脆弱的,它也不起作用:

def fetch(url):
headers = {'User-Agent' : "Chrome/11.0.696.16"}
result = urlfetch.fetch(url,headers)
if result.status_code == 200:
s = result.content

try:
s = s.decode('iso-8859-1')
except:
pass
try:
s = s.decode('ascii')
except:
pass
try:
s = s.decode('GB2312')
except:
pass
try:
s = s.decode('Windows-1251')
except:
pass
try:
s = s.decode('Windows-1252')
except:
s = "did not work"

s = s.encode('utf-8')
s = unicode(s,'utf-8')
return s

最后一个变体返回 s 作为最后一个 except 的字符串“did not work”。

那么,我是否必须扩展我笨拙的 try/except 结构以包含所有可能的编码(这会起作用吗?),还是有更简单的方法?

为什么我决定抓取整个 html,而不仅仅是 BeautifulSoup?因为我想稍后进行 soupifying,以避免 GAE 中的 DeadlineExceedError。

我是否阅读了所有关于 Unicode 的优秀文章,以及应该如何阅读?是的。但是,我找不到一个不假设我知道传入编码的解决方案,而我不知道,因为我每天都在抓取不同的站点。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com