注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的小窝

slackware爱好者

 
 
 

日志

 
 

【转载】Beautifulsoup的几个问题  

2017-02-17 16:08:31|  分类: 计算机与互联网 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自palydawn《Beautifulsoup的几个问题》


使用beautifulsoup解析网页的时候出现的问题

 

Beautifulsoup的构造如下:

soup = BeautifulSoup(doc, from_encoding="gbk")

网页中指定的编码方式:

<meta http-equiv="content-type" content="text/html;charset=gbk"/>


出现的问题:

解析某些网页的时候提示:

WARNING:root:Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.

同时有些网页解析的结果还带有乱码。


上网查了一下,把soup = BeautifulSoup(doc, from_encoding="gbk") 改为

soup = BeautifulSoup(doc, from_encoding="gb18030")

再运行的时候可以了。

还有一个问题:

RuntimeError: maximum recursion depth exceeded

超过了最大的递归次数。

查到了原因:<br>标签泛滥

使用print(soup.prettify())可以发现,beautifulsoup会为所有的<br>标签添加一个</br>,并且把连续出现的第一个<br>当做第一层,第二个当做第二层<br>,。。。,由于文档中连续出现的<br>太多了,导致了上面的异常。

beautifulsoup的这种作法有点坑,貌似没看到哪个地方有说明的,要不是之前偶然遇到过这种事,还真不知道怎么查原因。在网页里面写<br>标签的也坑爹,为什么不能写成<br/>,这样就不会有问题了。Beautifulsoup<br>整理成<br>chao</br>这种形式,为什么不直接替换成<br/>,有人会写<br>chao</br>这种形式的网页吗。

验证:

    doc = 'palydawn<br>zhang<br>chao'

    soup = BeautifulSoup(doc)

print soup.prettify()

执行结果是:

palydawn

<br>

 zhang

 <br>

  chao

 </br>

</br>


解决这种问题的办法:

         自己在每个<br>后面添加一个/,变成<br/>

  评论这张
 
阅读(20)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017