Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。
它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。
在爬虫开发中主要用的是Beautiful Soup的查找提取功能。
Beautiful Soup是第三方模块,需要额外下载
下载命令:pip install bs4
安装解析器:pip install lxml
from bs4 import BeautifulSoup # 创建BeautifulSoup对象 # 当数据来源为本地文件时 file = open("xxx.html") soup = BeautifulSoup(file, "lxml") # 当数据来源为网络时 content = requests.get("url请求").text soup = BeautifulSoup(content, "lxml") #1 按标签名查找标签 soup.a # 获取第一个匹配到的标签 #2 tag属性,a为例 soup.a.attrs # 获取标签中所有属性名与对应属性值的字典 soup.a.attrs["属性名"] # 获取属性名对应的属性值 soup.a.["属性名"] # 获取属性名对应的属性值的简写 soup.a.string # 获取第一个匹配到的标签的文字内容 soup.a.text # 获取第一个匹配到的标签以及其所包含的子标签的所有内容 soup.a.contents[0] # tag的.content 属性可以将tag的子节点以列表的方式输出 .children:获取Tag的所有子节点,返回一个生成器 for child in bs.body.children: print(child) .descendants:获取Tag的所有子孙节点 .strings:如果Tag包含多个字符串,即在子孙节点中有内容,可以用此获取,而后进行遍历 .stripped_strings:与strings用法一致,只不过可以去除掉那些多余的空白内容 .parent:获取Tag的父节点 .parents:递归得到父辈元素的所有节点,返回一个生成器 .previous_sibling:获取当前Tag的上一个节点,属性通常是字符串或空白,真实结果是当前标签与上一个标签之间的顿号和换行符 .next_sibling:获取当前Tag的下一个节点,属性通常是字符串或空白,真是结果是当前标签与下一个标签之间的顿号与换行符 .previous_siblings:获取当前Tag的上面所有的兄弟节点,返回一个生成器 .next_siblings:获取当前Tag的下面所有的兄弟节点,返回一个生成器 .previous_element:获取解析过程中上一个被解析的对象(字符串或tag),可能与previous_sibling相同,但通常是不一样的 .next_element:获取解析过程中下一个被解析的对象(字符串或tag),可能与next_sibling相同,但通常是不一样的 .previous_elements:返回一个生成器,可以向前访问文档的解析内容 .next_elements:返回一个生成器,可以向后访问文档的解析内容 .has_attr:判断Tag是否包含属性 #3 函数 soup.a.get_text() # 同soup.a.text soup.find("a") # 同soup.a soup.find("a",属性名="属性值") # 根据属性值定位到第一个匹配到的标签 注意: 若属性名是 class 则需要在后面加个下划线,写成 class_ 原型: find_all(name, attrs, recursive, text, **kwargs) 参数可以是方法、属性、正则匹配式 soup.findall("a") # 获取匹配到的所有标签, 返回一个列表 soup.findall(["a", "b"]) # 可以获取多种类的标签 soup.findall("a", limit=2) # 获取前2个匹配到的标签 soup.select("选择器") 选择器包括: 标签选择器:soup.select("a") ID选择器:soup.select("#xxx") 类选择器:soup.select(".xxx") 层级选择器:soup.select("div a") # 任意多级 soup.select("div > a") # 直系的一级 注意:select函数返回的永远是一个列表 兄弟节点标签查找 soup.select(".mnav ~ .bri") #