Python爬虫初探(七)——爬虫之Beautifulsoup4介绍(Ⅰ)
一、bs4的简介
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的网页信息提取库。跟之前介绍的xpath方法有些类似,但操作上比xpath更方便。
安装方法:
pip install lxml
pip install bs4
二、bs4的简单使用
1.bs4的基本操作
先导入bs4模块
import bs4
from bs4 import BeautifulSoup
还是来xpath中的例子
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
这是一些简单的操作:
# 获取bs对象
bs = BeautifulSoup(html_doc,'lxml')
# 打印文档内容(把我们的标签更加规范的打印)
print(bs.prettify())
# 获取title标签内容
print(bs.title)
# 打印结果:<title>The Dormouse's story</title>
# 获取title标签名称
print(bs.title.name)
# 打印结果:title
# title标签里面的文本内容
print(bs.title.string)
# 打印结果:The Dormouse's story
# 获取p段落,通过标签导航找的是第一个
print(bs.p)
# 打印结果:<p class="title"><b>The Dormouse's story</b></p>
可以发现,bs4和xpath相比,不用再去写路径表达式了,想要获取哪个标签的信息,直接用如上的bs.标签就能实现,非常方便。
2.bs4的对象种类
bs4的对象种类一共有四种:
tag : 标签
NavigableString : 可导航的字符串
BeautifulSoup : bs对象
Comment : 注释
我们拿上面的命令来看看:
# bs对象
print(type(bs)) # 结果:<class 'bs4.BeautifulSoup'>
# 标签
print(type(bs.title)) # 结果:<class 'bs4.element.Tag'>
print(type(bs.a)) # 结果:<class 'bs4.element.Tag'>
print(type(bs.p)) # 结果:<class 'bs4.element.Tag'>
# 可导航的字符串
print(type(bs.p.string)) # 结果:<class 'bs4.element.NavigableString'>
# 注释
# 将html修改一下
html_comment = '<b><!--注释--></b>'
bs = BeautifulSoup(html_comment,'lxml')
print(type(bs.b.string)) # 结果:<class 'bs4.element.Comment'>
三、遍历功能
1.遍历子节点
contents 返回的是一个列表
children 返回的是一个迭代器通过这个迭代器可以进行迭代
descendants 返回的是一个生成器遍历子子孙孙
什么意思呢,解释一下,迭代 iterate指的是按照某种顺序逐个访问列表中的某一项,例如 Python中的for语句;而循环 loop指满足某些条件下,重复执行某一段代码,例如 Python中的while语句。
soup = BeautifulSoup(html_doc,'lxml')
links = soup.contents
for li in links:
r = li.find_all('a')
for l in r:
print(l.string) # 遍历a标签下的字符串Elsie,Lacie,Tillie
print(links) # 将整个html文本以列表形式返回
这次换个简单的结构
html = '''
<div>
<a href='#'>蜘蛛侠</a>
<a href='#'>钢铁侠</a>
<a href='#'>绿巨人</a>
</div>
'''
soup2 = BeautifulSoup(html,'lxml')
links = soup.div.children
print(type(links))
# 结果:<class 'list_iterator'>
for link in links:
print(link)
# 结果:中间有空行
<a href='#'>蜘蛛侠</a>
<a href='#'>钢铁侠</a>
<a href='#'>绿巨人</a>
# descendants 返回的是一个生成器遍历子子孙孙
for x in soup2.descendants:
print('----------------')
print(x)
结果如下:这只是一部分,最终会遍历到a标签下的名字,大家可以试一试,就像剥洋葱一样,一层一层剥开。还能发现,遍历的同时可以自动补全html的结构标签,是不是很棒?
----------------
<html><body><div>
<a href="#">蜘蛛侠</a>
<a href="#">钢铁侠</a>
<a href="#">绿巨人</a>
</div>
</body></html>
----------------
<body><div>
<a href="#">蜘蛛侠</a>
<a href="#">钢铁侠</a>
<a href="#">绿巨人</a>
</div>
</body>
----------------
有时我们需要获取多个标签内容,还想删掉多余的空格,这时该怎么办呢?
# strings 返回是一个生成器对象用过来获取多个标签内容
# stripped strings 和strings基本一致 但是它可以把多余的空格去掉
strings1 = soup2.strings
strings2 = soup2.stripped_strings
现在看是有空行的
print(strings1)
# 结果:
蜘蛛侠
钢铁侠
绿巨人
现在看是不是空行就消除了
print(strings2)
# 结果:
蜘蛛侠
钢铁侠
绿巨人
bs4部分的内容就先介绍这么多,剩下的部分咱们在下一章里接着聊。
第一篇:Python的要点(搭建环境、安装配置、第三方库导入方法详细过程)
第二篇:Python爬虫初探(一)——了解爬虫
第三篇:Python爬虫初探(二)——爬虫的请求模块
第四篇:Python爬虫初探(三)——爬虫之正则表达式介绍
第五篇:Python爬虫初探(四)——爬虫之正则表达式实战(爬取图片)
第六篇:Python爬虫初探(五)——爬虫之xpath与lxml库的使用
第七篇:Python爬虫初探(六)——爬虫之xpath实战(爬取高考分数线信息)
本文地址:https://blog.csdn.net/brilliant666/article/details/107647797
推荐阅读
-
Python爬虫初探(七)——爬虫之Beautifulsoup4介绍(Ⅰ)
-
python爬虫入门(六) Scrapy框架之原理介绍
-
python网络爬虫进阶之HTTP原理,爬虫的基本原理,Cookies和代理介绍
-
Python爬虫之Requests 库的介绍和操作实例
-
Python爬虫之requests库基本介绍
-
python爬虫之Scrapy介绍(模拟登录)
-
Python爬虫初探(七)——爬虫之Beautifulsoup4介绍(Ⅰ)
-
python网络爬虫进阶之HTTP原理,爬虫的基本原理,Cookies和代理介绍
-
python爬虫入门(六) Scrapy框架之原理介绍
-
Python爬虫之requests库基本介绍