python抓取动态网页(Python利用urllib2抓取网页返回乱码的问题(:输出:直接print))

优采云 发布时间: 2022-03-21 05:18

  python抓取动态网页(Python利用urllib2抓取网页返回乱码的问题(:输出:直接print))

  Python使用urllib2爬取网页,返回乱码: 输出:可以直接打印中文,而且注释的中文不会乱码,所以可以解析乱码的网页找到有用的解决方法!! 【问题解答】从问题现象到问题本质,一点点帮你分析一下为什么会出现问题,如何解决问题1.首先根据之前Python IDE的经验:【整理】各种Python IDE(集成开发环境)的总结和对比从上面的截图,基本上可以推断出它使用:【记录】IDE使用Python:Eclipse+PyDev2.所以,在为了完全重现问题,我去PyDev搭建了一个对应的项目。代码为:?1112131415#-*-coding:utf-8-*-'''CreatedonOct18,2013***@author:CLi'''fromurllibimporturlopendefgetHtml(url):page=urlopen(url)html=page.read ( )page.close()returnhtmlif__name__=="__main__":161718url=""html=getHtml(url)printhtml 那么输出就和原来一模一样了:3.出现这种现象的原因:(根据to:详细爬取网站,模拟登录和抓取动态网页的原理与实现(Python、C#等):【整理】关于HTML网页源码(GB2312、GBK)的字符编码(charset)格式, UTF-8, ISO8859-1 等)先)确认要处理的网页:/in:? 1(再根据:Character Encoding Concise Tutorial),我们可以看到这里的代码处理中,如果需要解码成Unicode,最好使用GBK。

  这里得到的新浪网页字符串对应GB2312。在Eclipse+PyDev的控制台中输出,但是结果是乱码。可以确定:在Eclipse+PyDev的控制台中,使用的字符编码不是GB2312(也不是GBK或GB18030)猜测:估计是用的,比较常用,UTF-84.但是不管它使用什么编码,都应该可以输出Unicode字符串:5.为了验证上面PyDev的console是UTF-8的猜测,所以使用编码:?6223#-* -coding:utf -8-*-'''CreatedonOct18,2013***@author:CLi'''fromurllibimporturlopendefgetHtml(url):page=urlopen(url)html=page.read()page.close()#uniCodehtml =html.decode("GBK")#returnuniCodehtmluniCodehtml=html.decode("GBK")utf8html=uniCodehtml.encode("UTF-8")returnutf8htmlif__name__=="__main__":url=""html=getHtml(url)printhtml的结果输出是Predicted,正常:6. 接下来很明显:你需要弄清楚为什么在这里:在Eclipse+PyDev的Console中,(不是我们之前做的,调用windows的cmd,以为It是GBK编码)但它是UTF-8编码然后参考:PrintingUnicodeineclips ePydevconsoleandinIdle 看看:结果在Eclipse的Window->Preferences中,找了半天也没找到console的编码设置。

  最后是:选择你的PyDev项目->Run->RunConfiguration->PythonRun->选择你当前的PyDev项目->Common->Encoding看:current,你的PyDev项目,运行时,控制台的编码used对应utf-87.,改成GBK:,然后点击运行。因此,如果在使用前有意将 Unicode 转换为 UTF-8,则此时的输出与预期的一样。到了,乱码:对应,去使用,最原创的代码,直接输出(获得GB2312新浪网页),代码未经任何转换:8.由此可以充分理解原因:(1)@ >从sina获取的html网页,这个字符串本身的字符编码为:GB2312(2)在Eclipse+PyDev中直接打印输出到控制台时,因为控制台默认为UTF-8编码,所以:将GB2312

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线