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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python调用BeautifuSoup进行html的文本内容提取问题 [相关的知识,希望对你有一定的参考价值。

定义一个提取文本的函数
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)

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搜标题,即可找到帖子地址)
参考技术A 编码错误,这个在网页处理中很常见,你首先要知道你要下载的网页是什么编码类型的。

以上是关于Python调用BeautifuSoup进行html的文本内容提取问题 [的主要内容,如果未能解决你的问题,请参考以下文章

BeautifuSoup库爬取美女图片

requests, Beautifusoup 爬取新浪新闻资讯

[python subprocess学习篇] 调用系统命令

Python是如何进行内存管理的?

对图片中的表格进行识别,并转换成excel文件(python小软件)(批量)

dzx2.5 templatedefaultforumviewthread_node_body.htm代码调用注释