1 BeautifulSoup对象
BeautifulSoup库可以将网页解析为Soup文档,返回值类型是BeautifulSoup,该对象具有很多方法,可用于提取数据。
BeautifulSoup传入的第一个参数是用于解析的网页,第二个参数是解析库的类型,常用类型有"html.parser", “lxml”, “html5lib”。
resp = requests.get(url, headers=headers)
soup = bs4.BeautifulSoup(resp.text, 'html.parser')
print(soup.__class__)
# 输出 <class 'bs4.BeautifulSoup'>
解析器
2 BeautifulSoup对象的属性和方法
属性
# <title>The Dormouse's story</title>
soup.title.name
# u'title'
soup.title.string
# u'The Dormouse's story'
soup.title.parent.name
# u'head'
soup.p
# <p class="title"><b>The Dormouse's story</b></p>
soup.p['class']
# u'title'
soup.a
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
方法
- find_all()
搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件。返回值类型是bs4.element.ResultSet,是一个 包含所有符合过滤条件的 tag子节点 的列表。
完整的语法:
name 参数:可以查找所有名字为 name 的tag。find_all(name="过滤的标签类型", attrs={过滤属性的键值对}, recursive, string, **kwargs)
attr 参数:就是tag里的属性。
string 参数:搜索文档中字符串的内容。
recursive 参数: 调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点。如果只想搜索tag的直接子节点,可以使用参数 recursive=False 。 - find()
用法同上,只不过返回的值是筛选到的第一个tag子节点,类型为bs4.element.Tag。 - selector()方法
soup.select("从chrome中复制得到")
tag节点的属性和方法
- 属性
tag.name: tag对应的名称,
tag.attrs: tag属性的键值对,
tag['class]:tag属性class键对应的值,还可直接赋值进行修改。
tag.contents: 将tag的子节点以列表方式输出。
tag.children: 返回tag的子节点迭代器。
tag.descendants:可以对所有tag的子孙节点进行递归循环。 - 方法
tag.get_text(): 获取tag中间的文本,可能包含子tag,
tag.get(‘href’): 获取tag里href属性对应的值,等价于tag[‘href’]。
学习文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#name