zoukankan      html  css  js  c++  java
  • 关于BeautifulSoup编码的一些问题

    昨天想初次接触BeautifulSoup,想通过写一个简易在线词典小工具边学边练。

    为了深入了解一下BeautifulSoup,没有采用直接调用在线词典api,而是通过分析百度结果页html得到代码段。

    中间调试数次,总是在第一次搜索成功之后出现假死。代码如下:#!/usr/bin/python

    反复不得其解,最终通过CPyUG得到了Rujia Liu帮助:

    Rujia写道

    我试了下,有些网页的字符编码没有被beautifulSoup检测出来,比如搜索"list"的时候,结果中有的字符不在gb2312里,但是网页meta里写的确实gb2312。我的解决方法是自行encode且忽略错误,像这样:
    wordweb=unicode(wordweb,'gb18030','ignore') # 因为用了ignore, 这里也可以编码成gb2312
    soup=BeautifulSoup(wordweb)
    目前我试了不少单词,都可以搜。
    btw: 最好别用"译典通"作为定位依据吧,根据id找div比较靠谱。有几个id特殊的div,比如dict, en,
    enc。另外,捕捉一下异常,处理单词不存在的情况。
    - Rujia

    Rujia 写道

    当charset有问题的时候,BeautifulSoup不会忽略掉无法解码的字符。我以前就是你搜到的这么写的,但是偶尔会遇到问题(我写的搜索引擎,处理的网页比较千奇百怪),所以才用的我前面提到的解决办法。

    通过google了解到,BeautifulSoup遇到编码混乱的网页可以采用如下普遍做法:

    def search(self):
            word=self.edit.text()
            wordweb=urllib2.urlopen("http://dict.baidu.com/s?wd=%s"% word)
            charset = wordweb.headers['Content-Type'].split(' charset=')[0].lower()
            soup=BeautifulSoup(wordweb,fromEncoding=charset)
            exp=soup.findAll(text=re.compile(u'译典通'))[0].parent.parent.parent.parent
            exp=str(exp).decode('utf8')
            self.label.setText(exp)
  • 相关阅读:
    linux-centos7 安装 maven 代码管理工具,以及常见配置
    linux-centos7 安装 jre + tomcat 实现 web 服务器
    python 开发语言 博客目录
    生存分布函数
    债务偿还
    密度聚类算法
    POI兴趣点搜索
    区域地址搜索
    地址之间的距离
    地理坐标转换
  • 原文地址:https://www.cnblogs.com/catmelo/p/2085263.html
Copyright © 2011-2022 走看看