打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
爬虫必备网页解析库——BeautifulSoup详解汇总(含Python代码举例讲解 爬虫实战)

大家好,我是辰哥

本文带大家学习网页解析库BeautifulSoup,

并通过python代码举例讲解常用的BeautifulSoup用法

最后实战爬取小说网页:重点在于爬取的网页通过BeautifulSoup进行解析。

BeautifulSoup库的安装

在使用BeautifulSoup解析库之前,先简单介绍一下BeautifulSoup库并讲解如何安装BeautifulSoup库。

BeautifulSoup的基础概念

BeautifulSoup支持Python标准库中的Html解析器,还支持一些第三方解析器。利用它可以不用编写正则表达式即可方便地实现网页信息的提取。

安装BeautifulSoup

BeautifulSoup的安装其实很简单,下面介绍两种不同的安装方式(适用不同的操作系统)。







#方式一:pip安装pip install BeautifulSoup4
#方式二:wheel安装#下载对应系统版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibspip 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基本元素

上述内容讲解了获取到一个BeautifulSoup 对象后,一般通过BeautifulSoup类的基本元素来提取html中的内容。下表中列举了BeautifulSoup的基本元素:

基本元素见表所示:

基本元素

说明

Tag

标签,用<>和</>标明开头和结尾

Name

标签的名字

Attributes

标签的属性

NavigableString

标签内非属性字符串

Comment

标签内字符串的注释部分

BeautifulSoup的使用

通过一个小例子,学习BeautifulSoup 库如何去解析网页并提取数据。首先构造一个html网页数据,再将其解析为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')
首先是导入BeautifulSoup库,然后构造一段html源码,最后解析为BeautifulSoup对象。下面通过几个例子进行讲解提取数据。

提取数据

#提取首个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可以通过标签的class、id等属性去定位网页标签,此外还可以通过父级、子级关系去定位。

实战:抓取不同类型小说

内容:抓取不同类型小说的书名和链接

思路:爬虫抓取不同类型的小说网页,并通过BeautifulSoup去解析网页源码,提取出数据

链接:http://book.chenlove.cn/all/id/18.html

在浏览器中访问链接其页面如下:

这里的链接对应的是“奇幻玄幻”类型的小说,点击不同的分类小说,就可以获取到对应的链接。这里以“奇幻玄幻”为例,进行讲解如何去爬取该类别的小说,并通过BeautifulSoup去解析页面。以此类推,只需要更换不同的类型链接,就可以达到抓取不同类型的小说的效果。

首先分析一下网页源码:

通过网页源代码可以清楚的知道页面的所有小说都在class为listboxw的div标签里,而每一本小说都在dl标签中,我们需要抓取的小说书名和链接在dl标签下的dd标签中的第一个a标签里面。

完整代码如下

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'))
代码整体思路:先requests请求目标链接,获取到网页源码,然后通过BeautifulSoup去解析源码,最后提取出小说书名和小说链接。因为小说书名和小说链接都在a标签中,所以可以通过a.string去提取书名、a.get('href’)提取小说链接,最后输出结果。

结果

智行斗罗
/novel/235.html
历劫我是认真的
/novel/234.html
开局奖励七张人物卡
/novel/233.html
被召唤到异界的丧尸
/novel/232.html
........

最后


本文汇总BeautifulSoup常用的基本语法,并结合Python进行举例演示

最后实战讲解BeautifulSoup在爬虫中的应用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python3中BeautifulSoup的使用方法
Learn Beautiful Soup(3)
解析库的使用-xpath-beautifulsoup-pyquery
BeautifulSoup 中的 find,find_all
智能营销总部:Python 爬虫从入门到进阶之路(十二)
python3爬虫系列04之网页解析器:re正则式,BeautifulSoup库的解释
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服