爬虫必备网页解析库——BeautifulSoup详解汇总(含Python代码举例讲解+爬虫实战)
大家好,我是辰哥
本文带大家学习网页解析库BeautifulSoup,
并通过python代码举例讲解常用的BeautifulSoup用法
最后实战爬取小说网页:重点在于爬取的网页通过BeautifulSoup进行解析。
BeautifulSoup库的安装
BeautifulSoup的基础概念
BeautifulSoup支持Python标准库中的Html解析器,还支持一些第三方解析器。利用它可以不用编写正则表达式即可方便地实现网页信息的提取。
安装BeautifulSoup
BeautifulSoup的安装其实很简单,下面介绍两种不同的安装方式(适用不同的操作系统)。
#方式一:pip安装
pip install BeautifulSoup4
#方式二:wheel安装
#下载对应系统版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs
pip install beautifulsoup4-4.9.3-py3-none-any.whl
方式一,通过pip install BeautifulSoup4命令就可以直接安装;
方式二,需要通过下载whl文件,再去安装。
其下载链接为:http://www.lfd.uci.edu/~gohlke/pythonlibs。访问链接后下载beautifulsoup4-4.9.3-py3-none-any.whl。
BeautifulSoup基本元素
基本元素见表所示:
基本元素 | 说明 |
Tag | 标签,用<>和</>标明开头和结尾 |
Name | 标签的名字 |
Attributes | 标签的属性 |
NavigableString | 标签内非属性字符串 |
Comment | 标签内字符串的注释部分 |
BeautifulSoup的使用
完整代码如下:
from bs4 import BeautifulSoup
test_html = '''
<html>
<body>
<h4>学号</h4>
<ul>
<li>2112001</li>
<li>2112002</li>
<li class='blank'>2112003</li>
<li>2112004</li>
</ul>
<h4>姓名</h4>
<ul class="ul" style="color:red">
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>老六</li>
</ul>
</body>
</html>
'''
# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup(test_html, 'html.parser')
提取数据
#提取首个h4元素
item = soup.find('h4')
print(item)
#提取所有的h4元素
items = soup.find_all('h4')
print(items)
"""
结果:
<h4>学号</h4>
[<h4>学号</h4>, <h4>姓名</h4>]
"""
区别:
(1)find()只提取首个满足要求的数据
(2)find_all()提取出的是所有满足要求的数据
精确定位提取数据
# 查询class为blank的li标签
print(soup.find('li',class_='blank'))
# ul标签
print(soup.ul)
# 获取ul标签名字
print(soup.ul.name)
# ul标签的父标签(上一级标签)的名字
print(soup.ul.parent.name)
# ul标签的父标签的父标签的名字
print(soup.ul.parent.parent.name)
"""
结果:
<li class="blank">2112003</li>
<ul>
<li>2112001</li>
<li>2112002</li>
<li class="blank">2112003</li>
<li>2112004</li>
</ul>
ul
body
html
"""
实战:抓取不同类型小说
内容:抓取不同类型小说的书名和链接
思路:爬虫抓取不同类型的小说网页,并通过BeautifulSoup去解析网页源码,提取出数据
链接:http://book.chenlove.cn/all/id/18.html
在浏览器中访问链接其页面如下:
首先分析一下网页源码:
完整代码如下:
from bs4 import BeautifulSoup
import requests
# 设置代理服务器
headers = {
'User_Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'}
#请求连接
url = "http://book.chenlove.cn/all/id/18.html"
response = requests.get(url, headers=headers)
if response.status_code == 200:
# 转化为utf-8格式,不加这条语句,输出爬取的信息为乱码
response.encoding = 'utf8'
# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup(response.text, 'html.parser')
for element in soup.find_all(['dl', ['dd']]):
a = element.find('a')
if a.string!=None:
print(a.string)
print(a.get("href"))
结果:
智行斗罗
/novel/235.html
历劫我是认真的
/novel/234.html
开局奖励七张人物卡
/novel/233.html
被召唤到异界的丧尸
/novel/232.html
........
最后
本文汇总BeautifulSoup常用的基本语法,并结合Python进行举例演示
最后实战讲解BeautifulSoup在爬虫中的应用。
2021-09-17
2021-09-16
2021-09-15
2021-09-14