过滤器find_all
find_all(name, css, recursive , text , keyword )
find_all
是Beautiful Soup中比较重要的过滤器,主要的作用是对HTML进行解析,提取关键的标签,关键的属性,关键的文字,name和 css又是find_all中相对重要的两个参数,掌握了这两个参数find_all使用也就手到擒来了。
from bs4 import BeautifulSoup
import requests
url = "https://www.csdn.net/"
html = requests.get(url)
soup = BeautifulSoup(html.text, features="html.parser")
name
name
是指我们的标签的名字;
img_list = soup.find_all('img' )
for img in img_list:
print(img)
也可以是一个列表
ha_list = soup.find_all(['h2', 'a' ])
for ha in ha_list:
print(ha)
keyword
keyword
是按照属性来搜索,也就是属性关键字比如id=‘1235’等等
img_list = soup.find_all(id="nav")
for img in img_list:
print(img)
css类名
css
类名是通过搜索css类名的关键字class
,Beautiful Soup的4.1.1版本以后使用_class否则会报错
class_list = soup.find_all(class_="common_num ")
for class_ in class_list:
print(class_)
和上面那条一样:
soup.find_all(attrs={"class": "common_num"})
recursive
recursive
只是一个单纯的参数,用来显示搜索tag的直接子节点,要么不用,要么设为false,当设为false时,只显示搜索tag的直接子节点
print(soup.find_all("title"))
# [<title>CSDN-专业IT技术社区</title>]
print(soup.find_all("title", recursive=False))
# []
text
通过 text
参数可以搜搜文档中的字符串内容.与 name
参数的可选值一样, text
参数接受字符串,正则表达式,列表看例子:
#字符串
list = soup.find_all(text="CSDN-专业IT技术社区" )
print(list)
#正则表达式
text = soup.find_all(text=re.compile("CSDN"))
print(text)
#列表
list = soup.find_all(text=["推荐" , "最新文章"])
print(list)
limit
limit
参数限制返回结果的数量
img_list = soup.find_all('img' , limit=3)
for img in img_list:
print(img)
总结
对于过滤器来说,主要是灵活运用,find_all中的各个参数,可以同时使用,接下来会用find_all实现一个简单的爬虫https://blog.csdn.net/jklcl/article/details/82193107
在Beautiful Soup中比较好用的还有select。