BeautifulSoup模块
一、BeautifulSoup模块基本使用
soup=BeautifulSoup(解析内容,'html.parser(解析器)') 生成document对象
soup=BeautifulSoup(解析内容,features='lxml') lxml与html.parser都是解析器,但是lxml是第三方模块,同时性能比内置的html.parser高
d1=soup.find() 返回第一个匹配的标签对象
d2=soup.find_all() 返回所有匹配的标签对象
二、find与find_all的参数
name='' 标签名
id='' 标签的ID值
class_ 标签的类名
href= 链接地址
attrs={'属性':'属性值'} 指定查找标签的属性与属性值,所有属性都可以指定
recursive 是否递归查找标签,为True时会在标签对象的所有下级标签中查找满足条件的标签
text='' 标签内部文本
limit= find_all方法指定查找多少个满足条件的标签
注:find_all的参数传值时除了可以使用指定的值之外还可以使用函数和正则表达式,name,class_,text,id,href参数还可以赋值列表
=======赋值列表=========== v=soup.find_all(name=['a','div']) print(v) =======赋值正则表达式======= import re rep=re.compile('p') v=soup.find_all(name=rep) print(v) =======赋值函数========== def func(tag): return tag.has_attr('class') and has_attr('id') v=soup.find_all(name=func) print(v)
三、标签对象的方法和属性
标签对象.attrs 返回标签属性与属性值的字典
标签对象.get('value') 获取指定的标签对象
标签对象.name 获取标签名
标签对象.children 获取标签对象的所有子标签包括文本 使用类型判断排除文本
标签对象.descendants 获取标签对象的所有下级标签
标签对象.clear 删除所有子标签
标签对象.decompose() 递归删除所有标签
标签对象.extract() 删除标签并返回,该标签为其他标签的子标签
标签对象.decode()|decode_contents() 将标签对象转换为字符串|将标签对象的内容转换为字符串
标签对象.encode()|encode_contents() 将标签对象转换为字节|将标签对象的内容转换为字节
标签对象.has_attr() 检查标签对象有没有指定的属性
标签对象.get_text() 获取标签对象的内部文本
标签对象.index(标签对象) 获取标签对象在指定标签的索引位置
标签对象.is_empty_element 是否是空标签或者自闭合标签
标签对象.select(css选择器) 等于find_all ,如tag.select('a[href*="正则"]')
标签对象.select_one(css选择器) 等于find
标签对象.string 获取标签文本,还可以设置
标签对象.stripped_strings 递归获取所有标签的文本
标签对象.append(标签对象) 在标签内追加标签
标签对象.insert(索引,标签对象) 在标签内部指定索引位置插入新标签
标签对象.insert_after|insert_before 在标签前面或后面插入新标签
标签对象.replace_with() 将标签对象替换为其他标签
标签对象.setup(previous_sibling=标签对象) 通过两个标签之间的关系插入标签
标签对象.wrap() 用指定标签包裹当前标签
标签对象.unwrap() 去掉当前标签,保留其包裹的标签
标签对象.(next,next_element,next_elements,next_sibling,next_siblings,previous.....,parent,parents) 通过关系查找标签
标签对象.find_next()|find_all_next(),find_next_sibling()|find_next_siblings()|find_previous,......|find_parent()|find_parents() 参数同find_all 与上面类似
补充:通过Tag模块创建标签
from bs4.element import Tag Tag() #创建标签,参数同find

浙公网安备 33010602011771号