BeautifulSoup是用于HTML的解析的库,其实也比较容易理解,就是当我们把网页的源代码获取下来后,使用BeautifulSoup来进行对特定内容的提取;
接下来就好理解了,BeautifulSoup既然是用来提出HTML源代码中的内容的,那我们只需要理解它的提取规则就行了;
1.讲规则之前,首先我们来理解一下简单的使用步骤;
步骤:
A.获取HTML源代码(requests) ->B.将源码传给BeautifulSoup并生成对象 -> C.通过BeautifulSoup实例对象调用方法获取指定内容;
2.规则
根据上面的步骤,再来理解一下规则,也就是细节部分
步骤A : 很好理解,就是用requests.get方法,或者其他方法来请求网页,获取网页源代码;例如: html = requests.get(url).content.decode()
步骤B: 也很明了,将源码通过BeautifullSoup参数的形式传递,这一步需加入"指定解析器"环节,如 soup= BeautifullSoup(html,'lxml') 其中的"lxml"就是指定的解析器,另外可以是"html.parser"
步骤C: 通过对象调用BeautifulSoup的方法,这里面常用的有以下几个方法:
1.find
2.find_all
find,find_all参数相同原型: find_all(name,attrs,recursive,text,**kwargs)
name --html标签名 例如:body,div,li,ul
attrs -- 参数的值是一个字典,字典的key是属性名,字典的value是属性值,例如:attrs = {'class':'useful'}
recursive 的值为True或者False,当它为False的时候,BS4不会搜索子标签.
text 可以是一个字符串或者是正则表达式,用于搜索标签里面的文本信息,因此,要寻找所有以"我需要"开头的信息,还可以使用下面的写法:
content = soup.find_all(text = re.compile('我需要')
for each in content:
print(each.string)
**kwargs 表示key = value形式的参数.这种方式也可以用来根据属性和属性的值进行搜索.这里的key是属性,value是属性值.如果搜索的html标签的class属性,就需要写成class_.大多 数情况下,参数与标签配合使用,但是有时候如果属性值非常特殊,也可以省略标签,只用属性:
find_all('div',id = 'test')
find_all(class_ = 'iamstrange')
find,find_all 区别,find发现目标后,立即停止,返回目标BeautifulSoup Tag对象; find_all返回所有匹配到的BeautifulSoup Tag对象列表;需要使用遍历的方法来逐个输出匹配到的目标;
好吧,find,find_all,原型参数,啰嗦了一大阵,其实用的时候就那么几种,看个人习惯,哪种方式都可以,会用的,习惯的,也就是高效的;
小结:使用BeautifulSoup的时候,首先需要得到网页的源代码,然后付给BeautifulSoup的实例化对象,通过对象去调用find,find_all方法