Python调用BeautifuSoup进行html的文本内容提取问题 [

定义一个提取文本的函数defgettext(html):frombs4importBeautifulSoupsoup=BeautifulSoup(html)returns... 定义一个提取文本的函数
def gettext(html):
from bs4 import BeautifulSoup
soup= BeautifulSoup(html)
return soup.get_text()
这是我下载内容的函数
def downURL(url,filename):
print url
print filename
try:
fp = urllib2.urlopen(url)
except:
print 'download exception'
return 0
op = open(filename,"wb")
while 1:
s = fp.read()
if not s:
break
s=gettext(s)
op.write(s)
fp.close()

return 1
编译的时候就提示
WARNING:root:Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
还有
UnicodeEncodeError: 'ascii' codec can't encode characters in position 106-124: ordinal not in range(128)
展开
 我来答
againinput4
推荐于2016-09-07 · TA获得超过2407个赞
知道大有可为答主
回答量:1446
采纳率:70%
帮助的人:645万
展开全部
1.python代码是解释性代码,即不需要编译,直接就可以通过python解析器,去一点点解释翻译,直接运行的。所以,你说的“编译”就是不确切的说法。

2.UnicodeEncodeError的错误原因在于:
你在输出Unicode字符时,保存为默认的,ascii编码的字符串时,ascii字符集中没有包含对应的,十有八九是中文的字符,所以报错了。
先不说解决办法,因为从你的此处代码来看,从头到尾,都是不妥当的。

3.另外,你对返回的html代码,调用BeautifulSoup时,没有指定对应的字符编码类型。也是不妥当的做法。

4.总的来说,还是那句,不论是本意是:
(1)获得对应的html代码,另存为对应的文件
还是
(2)想要实现下载某个url地址(对应的)文件
你的代码,都是逻辑上就很不明确的。

解决办法:
(1)获得对应的html代码,另存为对应的文件
想了下,还是懒得贴我的全部的代码了。
太麻烦了。
针对你自己的代码,你自己去把:
A。
op = open(filename,"wb")
改为
op = codecs.open(filename,"a+", "UTF-8")

B .
soup= BeautifulSoup(html)
改为:
soup= BeautifulSoup(html, from_encoding="xxx")
其中xxx是你所要打开的网页的编码类型,常见的有utf-8,gbk等。
是因url不同而不同的。
详情自己参考我写的:
【整理】关于HTML网页源码的字符编码(charset)格式(GB2312,GBK,UTF-8,ISO8859-1等)的解释

(2)想要实现下载某个url地址(对应的)文件
参考我的,之前就实现好的函数:
crifanLib.py downloadFile

(这里不给贴地址,请自己用google搜标题,即可找到帖子地址)
yang_bigarm
2012-12-03 · TA获得超过3949个赞
知道大有可为答主
回答量:1664
采纳率:100%
帮助的人:625万
展开全部
编码错误,这个在网页处理中很常见,你首先要知道你要下载的网页是什么编码类型的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式