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_”开头,所以试了下正则表达式:

也正确的把他们都选出来了!
时隔半年再来写这个小爬虫,还是挺吃力啊!所以还是学了之后要多用,多巩固,才能迎刃而解!

浙公网安备 33010602011771号