2016-09-23 16 views
0

私は小さなproject.andをやっている私はurl.iを開きたいが、このUnicodeDecodeError:「UTF-8」コーデックは位置251でバイト0xb5をデコードすることはできません:無効な開始バイト

url = 'http://www.ygdy8.net/html/gndy/dyzz/index.html' 
content = urllib.request.urlopen(url).read() 

pat = re.compile('<div class="title_all"><h1><front color=#008800>.*?</a>> </front></h1></div>'+ '(.*?)<td height="25" align="center" bgcolor="#F4FAE2"> ',re.S) 
txt = ''.join(pat.findall(content)) 

てみましたしかし、これは私にエラー

TypeError: can't use a string pattern on a bytes-like object 

を与える、私はエラー

0123もあり

txt = ''.join(pat.findall(content.decode())) 

と試みたが、

txt = ''.join(pat.findall(content.decode())) 
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 251: invalid start byte 

私は答えを探しましたが、解決方法はわかりません。

+0

あなたは 'content.decode(" latin-1 ")'を試しましたか? –

+0

答えを削除しました。 'latin-1'は動作しますが、実際にはエンコーディングを知るためにヘッダー情報を取得する必要があります。リンクされた重複した質問の答えの1つがそのことを説明しました。 –

+0

ヘッダーは 'content.decode( 'gb2312'、errors = 'ignore')を意味します。つまり、私はあなたの正規表現が動作するとは思わない。 –

答えて

0

ヘッダーはcontent.decode( 'gb2312'、errors = 'ignore')が機能することを意味します。

>>> content.find(b'charset') 
226 
>>> content[226:226 + 20] 
b'charset=gb2312">\r\n<t' 

ただし、正規表現は機能しません。 fontの代わりにfrontがあります。おそらくあなたは以下を望んでいたでしょう:

>>> pat = re.compile(r'<div class="title_all"><h1><font color=#008800>.*?</a>></font></h1></div>'+ r'(.*?)<td height="25" align="center" bgcolor="#F4FAE2"> ',re.S) 

これは、私が知る限り、2つの部分の間のテーブルのものをキャッチします。

>>> txt = ''.join(pat.findall(content.decode('gb2312',errors='ignore'))) 
>>> print(txt[:500]) 

<div class="co_content8"> 
<ul> 

<td height="220" valign="top"> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="tbspan" style="margin-top:6px"> 
<tr> 
<td height="1" colspan="2" background="/templets/img/dot_hor.gif"></td> 
</tr> 
<tr> 
<td width="5%" height="26" align="center"><img src="/templets/img/item.gif" width="18" height="17"></td> 
<td height="26"> 
    <b> 

     <a href="/html/gndy/dyzz/20160920/52002.html" class="ulink">2016年井柏然杨颖《微微一笑很倾城》HD国语中字</a> 
    </b> 
< 
>>> pat.pattern 
'<div class="title_all"><h1><font color=#008800>.*?</a>></font></h1></div>(.*?)<td height="25" align="center" bgcolor="#F4FAE2"> ' 
>>> 
関連する問題