beautifulsoup 框架介绍
框架官方中文文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
框架基本使用:
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
Tag:标签
NavigableString: 可遍历字符串对象
BeautifulSoup:表示一个文档的全部内容
Comment:注释
find_all()函数:
find_all( name , attrs , recursive , string , **kwargs )
搜索 name 参数的值可以使任一类型的 过滤器 ,字符窜,正则表达式,列表,方法或是 True
recursive :布尔型,是否查找所有子节点,默认为true
eg:
find_all("a") 查找标签为a
find_all(id="xx") 查找id为xx的属性
soup.find_all(href=re.compile("elsie"), id='link1') 查找属性值包含"elsie"且id为'link1'
data_soup.find_all(attrs={"data-foo": "value"}) 查找属性名为data-foo值为value
soup.find_all("a", class_="sister") 查找标签为a,class为sister(注意class是python中的关键字,所以这里要用class_)
soup.find_all("a", attrs={"class": "sister"}) 查找标签为a,class属性为sister
find_next_siblings() 和 find_next_sibling() 平行查找(在同一个父节点下的下一个/所有子节点,注意是同一个父节点下)
css选择器:select()
soup.select("title") 查找title标签
soup.select("p:nth-of-type(3)") 查找p标签
soup.select("body a") 查找body标签中的a标签
soup.select(".sister") 查找class为sister的标签 注意有个.
soup.select("[class~=sister]") 查找class为sister的标签 符号:~=
soup.select("a#link2") 查找a标签且id为lingk2
soup.select("#link1,#link2") 查找id为link1或者lingk2
soup.select('a[href]') 查找a标签且存在属性名为href
输出:
格式化输出:soup.prettify()
压缩输出:str(soup) 或者 unicode(soup.a) (应用于只想得到结果字符串,不重视格式)
输出tag中的文本内容:get_text()
输出tag中的文本内容扩展:soup.get_text(strip=True) 去除文本前后的空白符
其他详细介绍可以参阅官方文档