使用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/>。
评论