beautifulsoup find_all怎样把带有某种属性的标签选出而不含该属性的标签不选




为了将comments下的所有用户评论选出来

每一个<li>标签代表一个用户的评论,就直接用find_all('li')了

但发现这里有21项,但数了数发现只有20个用户,原来啊是这里出问题了:

这个li标签是用户评论下的一张图片。

但我们不想选到这个,观察一下,用户的li含有“data-id”和“id”属性,而图片没有,如下图:

 

于是就去百度找了一下“beautifulsoup find_all怎样把带有某种属性的标签选出而不含该属性的标签不选”但没找到结果,

先是试了试在find_all加入属性,想匹配出含有"data-id"属性的“li”标签,但试了几个都出问题,就感觉这个方法行不通。

 

最后通过翻阅beautifulsoup官方文档,发现一个find_all传方法:

于是自己也写了一个方法,正好把所有符合条件的都选了出来了

1 soup = BeautifulSoup(open(comment_file,encoding='utf-8'),'lxml')
2 comments = soup.select('div.comment-list')[0]
3 comments = comments.find_all(lambda tag:tag.has_attr('data-id') and tag.has_attr('id'))

如下

后来又阅读了一下官方文档,

 

发现这些用户的li都含有id属性,且“id”均含“rev_”开头,所以试了下正则表达式:

 也正确的把他们都选出来了!

 

 时隔半年再来写这个小爬虫,还是挺吃力啊!所以还是学了之后要多用,多巩固,才能迎刃而解!

 




posted @ 2017-09-22 13:46  chen狗蛋儿  阅读(14166)  评论(1编辑  收藏  举报