簡體   English   中英

使用Python進行網頁抓取時漢字的矛盾編碼規范

[英]Contradictory encoding specifications of Chinese characters when using Python to web scrape

我正在使用BeautifulSoup從一個中國的在線發布網站上抓取數據,這是其中一部小說的URL http://www.jjwxc.net/onebook.php?novelid=1485737

我嘗試了不同的編碼和解碼方案(例如gb2312,utf-8)及其組合來閱讀網站。 例如

import requests
from bs4 import BeautifulSoup
url = "http://www.jjwxc.net/onebook.php?novelid=1485737"
response =  requests.get(url)
text = response.text 

print text.encode('gb2312')
>> UnicodeEncodeError: 'gb2312' codec can't encode character u'\xa1' in position 340: illegal multibyte sequence

print text.encode('utf-8')
>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
        <title>¡¶£¨Õý°æ£©±¼Ô¡·Êñ¿Í_¡¾Ô­´´Ð¡Ëµ|ÑÔÇéС˵¡¿_½ú½­ÎÄѧ³Ç</title>
                <meta name="Keywords" content="Êñ¿Í,£¨Õý°æ£©±¼ÔÂ,Êñ¿Í¡¶£¨Õý°æ£©±¼Ô¡·,Ö÷½Ç£ºÁøÉÒ ©§ Åä½Ç£ºÔ£¬Â½À룬ËÕÐÅ£¬°×ÒÂÚ­ÄÇ£¬Âå¸è£¬×¿ÇïÏÒ£¬ÉÌÓñÈÝ£¬Ð»ÁîÆëµÈµÈ£¨³ö³¡ÅÅÃû£© ©§ ÆäËü£ºÏÉÏÀ£¬ÁøÉÒ£¬ÔÂÉñ£¬Éñ»°,ÇéÓжÀÖÓ Å°ÁµÇéÉî ÁéÒìÉñ¹Ö âêÈ»Èôʧ ×îиüÐÂ:2015-07-15 23:57:04 ×÷Æ·»ý·Ö£º193191456" />

請注意,文檔本身聲稱使用gb2312進行了編碼。

我在論壇上瀏覽了一下,發現編碼定義可能存在一些問題。 如果我嘗試以下

import urllib2
html = urllib2.urlopen('http://www.jjwxc.net/onebook.php?    novelid=1485737').read()
soup = BeautifulSoup(html)
soup.original_encoding
>> {windows-1252}

import chardet 
chardet.detect(html) 

>> {'confidence': 0.0, 'encoding': None}

有人可以照亮這個問題嗎? 謝謝!

我使用了如何使用python解碼和編碼網頁中提到的方法 ,並發現它適用於大多數中國網站,但我感興趣的是該網站。

試試這個,它應該做的工作。

GBK編解碼器可提供與中文GB18030 / GBK / GB2312編碼之間的轉換。

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
from bs4 import BeautifulSoup
url = "http://www.jjwxc.net/onebook.php?novelid=1485737"
response = requests.get(url)
text = response.text
text = text.decode('gbk').encode('utf-8')
print text

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
        <title>隆露攏簍脮媒擄忙攏漏鹵錄脭脗隆路脢帽驢脥_隆戮脭顱麓麓脨隆脣碌|脩脭脟茅脨隆脣碌隆驢_陸煤陸顱脦脛脩摟魯脟</title>
...
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM