活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
目录
BeautifulSoup是python解析html非常好用的第三方库
BeautifulSoup库也称bs4库,是Python用于网页分析的第三方库,用来快速转换被抓取的网页。
BeautifulSoup可以把网页转换为一颗DOM树。
BeautifulSoup提供一些简单的方法以及类Python语法来查找、定位、修改一棵转换后的DOM树,还能自动将送进来的文档转换为Unicode编码。
BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库。
它通过转换器实现文档导航,查找,修改文档的方式。
BeautifulSoup将HTML文档转换成一个树形结构,每个结点都是对象,可以归纳为4种类型:Tag、NavigableString、BeautifulSoup、Comment
Tag,HTML中的一个标签。
NavigableString,用于操纵标签内部的文字,标签的string属性返回NavigableString对象
BeautifulSoup,表示的是一个文档的全部内容,大部分时候可以把它看作是一个特殊的Tag。
Comment,一个特殊类型的NavigableSting对象,它的内容不包括注释符号。
win+r+cmd
pip install beautifulsoup4
form bs4 import BeautifulSoup
获取Tag的所有子节点,返回一个list
# tag的.content 属性可以将tag的子节点以列表的方式输出 print(bs.head.contents) print(bs.head.contents[1])
获取Tag的所有子节点,返回一个生成器
for child in bs.body.children: print(child)
搜索Tag的所有子结点
find_all(name,attrs,recursive,text,**kwargs)name:名字为name的标签。
attrs:按照Tag标签属性值检索,采用字典形式。
recursive:如果只想搜索Tag的直接子结点,可以使用参数recursive=False。
text:通过text参数可以搜索文本字符中内容。 limit:限制返回结果的数量。
find()返回符合条件的第一个Tag,参数含义与find_all()方法相同
find(name,attrs,recursive,text)
即当我们要取一个值的时候就可以用这个方法
t = bs.div.div # 等价于 t = bs.find("div").find("div")
CSS的选择器用于选择网页元素。在bs4中,也可以利用类似的方法来筛选元素。
soup.select()返回类型是列表
通过标签名查找
- print(bs.select('title'))
-
- print(bs.select('a'))
通过类名查找
print(bs.select('.mnav'))
通过id查找
print(bs.select('#u1'))
获取内容
- t_list = bs.select("title")
- print(bs.select('title')[0].get_text())
from bs4 import BeautifulSoup #导入BeautifulSoup4库 soup = BeautifulSoup("hello python") #得到文档的对象 print(soup)结果:
hello python
- from bs4 import BeautifulSoup
-
- soup = BeautifulSoup(html,'lxml')#设置解析器,传递需要解析的html文档
-
- soup.prettify()#格式化代码
-
- soup.title.string#查看title标签内的文本
-
-
- soup.title#返回title标签
-
- type(soup.title) #返回
一个类变量 -
- soup.head#返回head标签
-
- soup.p#返回p标签,只返回第一个p标签,如果有多个只能输出第一个
-
-
-
soup.title.name #返回title 最外层标签的名称
- html = '''
paragraph
''' - from bs4 import BeautifulSoup
- soup = BeautifulSoup(html,'lxml')
- soup.p.attrs['name'] #返回a
- soup.p['name']] #返回结果同上
- html = '''
paragraph
''' - from bs4 import BeautifulSoup
- soup = BeautifulSoup(html,'lxml')
- soup.p.string #返回paragraph
- html = '''
paragraph
''' - from bs4 import BeautifulSoup
- soup = BeautifulSoup(html,'lxml')
- soup.head.p.string #返回paragraph
- soup.head.p.attrs['name'] # 返回a
- html = '''
paragraph
''' - from bs4 import BeautifulSoup
- soup = BeautifulSoup(html,'lxml')
- soup.head.contents #返回所有子节点列表
- the = soup.head.children
- for i,children in enumerate(the):
- print(i,children) # 返回一个iterable 必须使用for循环遍历出来
- soup.head.descendants #获取所有的子孙节点,返回类型是iterable object
- soup.a.parent #获取并输出父节点全部内容
- soup.a.parents #获取祖先节点
- soup.a.next_siblings
- soup.a.previous_siblings