首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python进行web抓取时汉字编码规范的矛盾

使用Python进行web抓取时汉字编码规范的矛盾
EN

Stack Overflow用户
提问于 2015-07-19 00:05:01
回答 1查看 343关注 0票数 0

我正在使用BeautifulSoup从一个中国在线出版网站上抓取数据,这是其中一本小说http://www.jjwxc.net/onebook.php?novelid=1485737的网址。

我尝试了不同的编码和解码方案(例如,gb2312,utf-8)和它们的组合来阅读网站。例如

代码语言:javascript
复制
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编码的。

我在论坛上参观了一下,发现编码定义可能有一些问题。如果我尝试执行以下操作

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

代码语言:javascript
复制
import chardet 
chardet.detect(html) 

给出

代码语言:javascript
复制
>> {'confidence': 0.0, 'encoding': None}

有人能帮我解决这个问题吗?谢谢!

我使用了how to decode and encode web page with python?中提到的方法,发现它适用于大多数中文网站,但我感兴趣的网站除外。

EN

回答 1

Stack Overflow用户

发布于 2015-07-19 00:32:07

试试这个,应该能行得通。

GBK编解码器提供中文

/GBK/GB2312编码之间的转换。

代码语言:javascript
复制
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>
...
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31493001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档