一、beautifulsoup4库简介

  使用requests库获取HTML页面并将其转换成字符串后,需要进一步分析HTML页面格式,提取有用信息,这个需要处理HTML和XML函数库。

  beautifulsoup4库,也成为Beautiful Soup库或者bs4库,用于解析和处理HTML和XML。需要注意的是,他不是Beautifulsoup库。它最大的优点是能根据HTML和XML语法建立解析树,进而高效解析其中的内容。

  HTML建立的web页面一般是比较复杂的,除了有用的信息外,还包括大量的页面格式信息元素,直接解析一个web网页需要深入了解HTML语法。而beautifulsoup4库将专业的web网页格式解析部分封装成函数,提供了若干有用快捷的处理函数。

 

二、beautifulsoup4库使用

1. beautifulsoup4库中最主要的是BeautifulSoup类,每个实例化的对象相当于一个页面。

使用BeautifulSoup()创建一个BeautifulSoup对象:

    

python中BeautifulSoup4 python中beautifulsoup4的用法_XML

  创建的BeautifulSoup对象是一个树形结构,它包含HTML页面中的每一个Tag(标签)元素,如<head>、<body>等。具体描述的话,是HTML中主要结构都变成了BeautifulSoup对象的一个属性,

可以直接用<a>.<b>形式获取,其中<b>的名字采用HTML中标签的名字。

 

2. BeautifulSoup对象常用的属性

     head          HTML页面的<head>内容

     title             HTML页面标题,在<head>中,由<title>标记

     body           HTML页面的<body>内容

     p            HTML页面中第一个<p>内容

     strings           HTML页面所有呈现在web上的字符,即标签的内容

     stripped_strings       HTML页面所有呈现在web上的非空字符串

 

如略去<style>标签输出:

python中BeautifulSoup4 python中beautifulsoup4的用法_字符串_02

 

  每一个Tag标签在beautifulsoup4库中都是一个对象,称为Tag对象。例如,title是一个标签对象。每一个标签对象在HTML中都有类似的结构:

  <a  class=''mnav'' href="http://www.baidu.com">糯米</a>

其中,尖括号(<>)中标签的名字是name,尖括号内其他项是attrs,尖括号之间的内容是string。因此,Tag对象有属性name、attrs、string,并且采用<a>.<b>的语法形式

    name      字符串标签的名字,比如div

    attrs        字典,包含了原来页面Tag所有属性,比如href

    contents     列表,这个Tag下所有子Tag的内容

    string      字符串,Tag所包围的文本,网页中真实的文字

如下:

python中BeautifulSoup4 python中beautifulsoup4的用法_字符串_03

由于HTML语法可以在标签中嵌套其他标签,所以string属性的返回值遵循如下原则:

(1)如果标签内部没有其他标签,string属性返回其中内容。

(2)如果标签内部还有其他标签,但只有一个标签,string属性返回最里面的标签内容。

(3)如果标签内部有超过一层嵌套标签,string属性返回None(空字符串)

HTML语法中同一个标签会有很多内容例如标签<a>,百度首页一共有13处,直接调用soup.a只能返回一个。当需要列出标签对应所有内容或者需要找到非第一个标签时,

需要用到BeautifulSoup的find()和find_all()方法。这两个方法会遍历到整个HTML文档,按照条件返回标签内容。

作用:根据参数找到标签对象,返回列表类型。

参数如下:

    name:按照Tag标签名字检索,名字用字符串形式表示,例如div、li;

    attrs:按照Tag标签属性值检索,需要列出属性名称和值,采用JSON表示;

    recursive:设置查找层次,只查找当前标签下一层时使用recursive=False;

    string:按照关键字检索string属性内容,采用string=开始;

    limit:返回结果的个数,默认返回全部结果;

 

如下:

python中BeautifulSoup4 python中beautifulsoup4的用法_HTML_04

 

 

  简单的说,BeautifulSoup的find_all()方法可以根据标签名字、标签属性和内容检索并返回标签列表,通过片段字符串检索时需要使用正则表达式re函数库。当对标签进行检索时,

属性和对应的值采用JSON格式,如:

  ‘src’:re.compile('jquery')    其中键值对中值的部分可以是字符串或者正则表达式。