我是靠谱客的博主 紧张翅膀,最近开发中收集的这篇文章主要介绍【问题】使用BeautifulSoup解析在python2和python3下表现不一样?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我要解析的网址是:http://browse.renren.com/sAjax.do?ajax=1&q=&p=[{%22t%22:%22age%22,%22range%22:%221%22}]&s=0&u=874525581&act=search&offset=0&sort=0
貌似是需要人人账号才能登陆。

我想要得到这个页面一共十个用户的id。从chrome开发者工具的Element中可以看到–>
这里写图片描述

先找到 ol class=”fl search_log”等等等 这个标签,再去找他的直接子孩子,10个 li 标签(ol和li标签在源代码中也是有的,不用担心在Element中有,在查看网页源代码中没有)。

于是我在python2中:

ageUrl = 'http://browse.renren.com/sAjax.do?ajax=1&q=&p=[{"t":"age","range":"1"}]&s=0&u=874525581&act=search&offset=%0&sort=0' 
agePage = urllib2.urlopen(ageUrl).read()
liList = BeautifulSoup(agePage).find(class_=['f1', 'search_log']).find_all('li', recursive=False)

可以得到:
这里写图片描述

是10个

再看 ol class=f1 search_log… 标签的孩子吧:
这里写图片描述

11个孩子,contents[1]显示不全,是一个用户的 li


我再用python3:

这里写图片描述

可以去看liList,它把所有10个li都作为列表的一项了(这里就不放图了)

再看 ol class=f1 search_log… 标签的孩子吧

这里写图片描述

两个孩子。contents[1]显示不全,好长一溜儿呢,是10个用户的 li


我不知道为什么网页结构解析的都不一样
stackoverflow上有个问题Python3, BeautifulSoup dropping a paragraph tag,人家那是BeautifulSoup解析前后网页结构不一样,和我的还是有点差别的。

里面有说到,对于网页结构不好的页面来说,使用不同的解析器结果是不同的。参见BeautifulSoup文档中的代码诊断:

如果想知道Beautiful Soup到底怎样处理一份文档,可以将文档传入 diagnose() 方法(Beautiful Soup 4.2.0中新增),Beautiful Soup会输出一份报告,说明不同的解析器会怎样处理这段文档,并标出当前的解析过程会使用哪种解析器:

from bs4.diagnose import diagnose
data = open("bad.html").read()
diagnose(data)

# Diagnostic running on Beautiful Soup 4.2.0
# Python version 2.7.3 (default, Aug  1 2012, 05:16:07)
# I noticed that html5lib is not installed. Installing it may help.
# Found lxml version 2.3.2.0
#
# Trying to parse your data with html.parser
# Here's what html.parser did with the document:
# ...

那我就在python2,3中分别试下,看他们用的是什么解析器

这里写图片描述

可以看到python2是html.parser。

这里写图片描述

非常悲剧的看到,python3是先试了html5lib(不是说lxml最优先的么?),再去找lxml,没有居然报错了,奇怪。算了,两个都没有,我想他也是用的html.parser咯。

所以py2和py3用的都是html.parser,然后结果不一样。
我不知道怎么解决。

最后

以上就是紧张翅膀为你收集整理的【问题】使用BeautifulSoup解析在python2和python3下表现不一样?的全部内容,希望文章能够帮你解决【问题】使用BeautifulSoup解析在python2和python3下表现不一样?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部