2.1 Beautiful Soup
Beautiful Soup借助网页的结构和属性等特性来解析网页
其在解析时 实际上依赖解析器,它 除了支持Python标准库中的HTML解析器外,还支持一些第三方解析器(比如lxml)——我选择使用lxml
prettify()
可以把要解析的字符串以标准的缩进格式输出
返回——bs4.element.Tag类型,具有str属性
节点选择器——根据属性**来选择
直接调用节点的名称就可以选择节点元素,再调用string属性就可以得到节点内的文本了
1:这种选择方式速度非常快:
2:如果单个节点结构层次非常清晰,可以选用这种方式来解析
eg:
soup.title.string()
输出HTML中title节点的文本内容
注:soup.title可以选出HTML中的title节点,
再调用string属性就可以得到里面的文本了
——调用string属性来获取文本的值
提取信息
1:获取节点的名称——调用name
print(soup.title.name)
2:获取属性和属性值——调用attrs(获取所有属性,一个节点 有时候不止一个属性)
print(soup.p.attrs)
返回字典{}形式,并且 把选择的节点的所有属性和属性值组合成一个字典
{'class': ['title'], 'name': 'dromouse'}
注:
有的返回结果是字符串,比如,name属性的值是唯一的,返回的结果就是单个字符串。
有的返回结果是字符串组成的列表。对于class,一个节点元素可能有多个class,所以返回的是列表。
∴在实际处理过程中,我们要注意判断类型
如果要获取name属性值,就相当于从字典中获取某个键值,只需要用中括号加属性名就可以了。比如,要获取name属性值,就可以通过attrs[‘name’]来得到
还可以 (法2)
直接在节点元素后面加中括号,传入属性名就可以获取属性值了。不写attrs
print(soup.p['name'])#
——输出
dromouse
3:获取 节点元素 包含的文本内容——调用string
print(soup.p.string)
获取的是 第一个 p节点的文本
嵌套选择:
每一个返回结果都是bs4.element.Tag类型,它可以被继续调用 来进行下一步的选择
eg:
获取了head节点元素(Tag类型),我们可以继续调用he