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_”开头,所以试了下正则表达式:
也正确的把他们都选出来了!
时隔半年再来写这个小爬虫,还是挺吃力啊!所以还是学了之后要多用,多巩固,才能迎刃而解!