zoukankan      html  css  js  c++  java
  • Python BeautifulSoup中文乱码问题的2种解决方法

    解决方法一:

    使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家
    首先是代码

    [python] view plain copy
     
    1. from bs4 import BeautifulSoup  
    2. import urllib2  
    3.   
    4. url = 'http://www.jb51.net/'  
    5. page = urllib2.urlopen(url)  
    6.   
    7. soup = BeautifulSoup(page,from_encoding="utf8")  
    8. print soup.original_encoding  
    9. print (soup.title).encode('gb18030')  
    10.   
    11. file = open("title.txt","w")  
    12. file.write(str(soup.title))  
    13. file.close()  
    14.   
    15.    
    16.   
    17. for link in soup.find_all('a'):  
    18.     print link['href']  


    在刚开始测试的时候发现,虽然输出是乱码的,但是写在文件里面却是正常的.然后在网上找了找解决办法才发现
    print一个对象的逻辑:内部是调用对象的__str__得到对应的字符串的,此处对应的是soup的__str__ 而针对于soup本身,其实已经是Unicode编码,所以可以通过指定__str__输出时的编码为GBK,以使得此处正确显示非乱码的中文
    而对于cmd:(中文的系统中)编码为GBK,所以只要重新编码为gb18030就可以正常输出了
    就是下面这行代码

    [python] view plain copy
     
    1. print (soup.title).encode('gb18030')  

    解决方法二:

    BeautifulSoup在解析utf-8编码的网页时,如果不指定fromEncoding或者将fromEncoding指定为utf-8会出现中文乱码的现象。

    解决此问题的方法是将Beautifulsoup构造函数中的fromEncoding参数的值指定为:gb18030

    [python] view plain copy
     
      1. import urllib2  
      2. from BeautifulSoup import BeautifulSoup    
      3.  page = urllib2.urlopen('http://www.jb51.net/');  
      4. soup = BeautifulSoup(page,fromEncoding="gb18030")  
      5. print soup.originalEncoding  
      6. print soup.prettify()   
  • 相关阅读:
    path.join()和path.resolve()
    __dirname和__filename
    使用css-loader
    博客主题
    Python使用pandas库读取txt文件中的Json数据,并导出到csv文件
    为什么一个星期工作量的工作,我做了一个多月,还没结束 (基于socket的分布式数据处理程序Java版)
    Docker 命令
    Python使用pandas库读取csv文件,并分组统计的一个例子
    Linux 进程守护脚本
    Linux 安装 JDK
  • 原文地址:https://www.cnblogs.com/jsben/p/5709372.html
Copyright © 2011-2022 走看看