BeautifulSoup中find和find_all的用法
在爬取网页中有用的信息时,通常是对存在于网页中的文本或各种不同标签的属性值进行查找,Beautiful Soup中内置了一些查找方式,最常用的是 find() 和 find_all() 函数。
同时通过soup.find_all()得到的所有符合条件的结果和soup.select()一样都是列表list,而soup.find()只返回第一个符合条件的结果,所以soup.find()后面可以直接接.text或者get_text()来获得标签中的文本。
一、find()用法
find(name,attrs,recursive,text,**wargs)
例子:
<ul id="producers">
<li class="producerlist">
<div class="name">plants</div>
<div class="number">100000</div>
</li>
<li class="producerlist">
<div class="name">algae</div>
<div class="number">100000</div>
</li>
</ul>
(1)ul,li,div这些就是标签;
用法p=soup.find('ul') ,那么返回结果是第一个ul标签以及<xx>...</xx>的所有内容,即上面的代码;注意若用p=soup.find('ul').get_text()那么结果不是...的所有内 容,而应该是plants 10000 algae 10000,即...中的标签不算text文本。
(2)
用法p=soup.find(text='algae'),print(p)得到的结果就是algae
(3)正则表达式后面自己另外去学习;
(4)ul id="producers">中的id即标签属性,那么我们可以查找具有特定标签的属性;
用法p=soup.find('ul', id="producers"),那么可以得到<xx>...</xx>的所有结果,其特点是把标签更一步精确化以便于查找。
对于大多数的情况可以用上面的方法解决,但是有两种情况则要用到参数attrs:一是标签字符中带有-,比如data-custom;二是class不能看作标签属性。解决的办法是在attrs属性用字典进行传递参数:
soup.find(attrs={'data-custom':'xxx'})
以及:
soup.find(attrs={'class':'xxx'})
二、find_all()用法
应用到find()中的不同过滤参数同理可以用到find_all()中,相比find(),find_all()有个额外的参数limit;
如下所示:
p=soup.find_all(text='algae',limit=2)
实际上find()也就是当limit=1时的find_all()。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!