11.爬虫---BeautifulSoup安装并解析爬取数据

2024-06-07 16:28

本文主要是介绍11.爬虫---BeautifulSoup安装并解析爬取数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

11.BeautifulSoup安装并解析爬取数据

    • 1.简介
    • 2.安装
    • 3.基本使用
      • 3.1 获取第一个div标签的html代码
      • 3.2 获取第一个li标签
      • 3.3 获取第一个li标签内容
      • 3.4 返回第一个li的字典,里面是多个属性和值
      • 3.5 查看第一个li返回的数据类型
      • 3.6 根据属性,获取标签的属性值,返回值为列表 不存在就报错
      • 3.7 获取具体属性 获取最近的第一个属性 不存在就返回None
      • 3.8 给class属性赋值,此时属性值由列表转换为字符串
    • 4.BS4实战
      • 4.1 查找第一个符合条件的标签
      • 4.2 查找所有符合条件的标签
      • 4.3 使用CSS选择器查找标签
      • 4.4 遍历所有文本内容

1.简介

BeautifulSoup是Python中的一个用于解析HTML和XML文档的库,它提供了一种Pythonic的方式来遍历文档、搜索元素以及修改文档的功能。在网络爬虫中,BeautifulSoup通常与其他库(如Requests)一起使用,用于解析和提取网页中的数据。

2.安装

要使用BeautifulSoup,首先需要安装它。可以通过pip命令直接从PyPI安装:

pip install beautifulsoup4

3.基本使用

安装完成后,我们可以开始使用BeautifulSoup来解析网页。首先,我们需要导入BeautifulSoup类,然后使用BeautifulSoup类的构造方法创建一个BeautifulSoup对象。例如:

#导入解析包
from bs4 import BeautifulSoup
html_doc = """
<div><ul><li class="item-0"><a href="link1.html">first item</a></li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-inactive"><a href="link3.html">third item</a></li><li class="item-1"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></ul></div>
"""
#创建beautifulsoup解析对象
# html_doc 表示要解析的文档,而 html.parser 表示解析文档时所用的解析器,
# 此处的解析器也可以是 'lxml' 或者 'html5lib'
soup = BeautifulSoup(html_doc, 'html.parser') 
#prettify()用于格式化输出html/xml文档
print(soup.prettify())

返回html树形结构:

<div><ul><li class="item-0"><a href="link1.html">first item</a></li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-inactive"><a href="link3.html">third item</a></li><li class="item-1"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul>
</div>

3.1 获取第一个div标签的html代码

 print(soup.div)

结果:

<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</li></ul>
</div>

3.2 获取第一个li标签

print(soup.li)

结果:

<li class="item-0"><a href="link1.html">first item</a></li>

3.3 获取第一个li标签内容

使用NavigableString类中的string、text、get_text()

print(soup.li.text)

结果:

first item

3.4 返回第一个li的字典,里面是多个属性和值

print(soup.li.attrs)

结果:

{'class': ['item-0']}

3.5 查看第一个li返回的数据类型

print(type(soup.li))

结果:

<class 'bs4.element.Tag'>

3.6 根据属性,获取标签的属性值,返回值为列表 不存在就报错

print(soup.li['class'])

结果:

['item-0']

3.7 获取具体属性 获取最近的第一个属性 不存在就返回None

if soup.li:print(soup.li.get('class'))
else:print('title标签不存在')

结果:

['item-0']

3.8 给class属性赋值,此时属性值由列表转换为字符串

soup.li['class'] = ['abc', 'list']
print(soup.li)

结果:

<li class="abc list"><a href="link1.html">first item</a></li>

4.BS4实战

目标网站:https://movie.douban.com/chart
在这里插入图片描述

from bs4 import BeautifulSoup
import requests
url = 'https://movie.douban.com/chart'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
html = requests.get(url, headers=headers)
soup = BeautifulSoup(html.text, 'html.parser')
print(soup.prettify())

4.1 查找第一个符合条件的标签

print(soup.find('a', class_='nbg'))

结果:

<a class="nbg" href="https://movie.douban.com/subject/34971728/" title="盟军敢死队">
<img alt="盟军敢死队" class="" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2908456064.jpg" width="75"/>
</a>

4.2 查找所有符合条件的标签

for item in soup.find_all('a', class_='nbg'):print(item)

结果:

<a class="nbg" href="https://movie.douban.com/subject/34971728/" title="盟军敢死队">
<img alt="盟军敢死队" class="" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2908456064.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/35503073/" title="对你的想象">
<img alt="对你的想象" class="" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/35742980/" title="挑战者">
<img alt="挑战者" class="" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2902765793.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/35914398/" title="哥斯拉-1.0">
<img alt="哥斯拉-1.0" class="" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/36467351/" title="银河写手">
<img alt="银河写手" class="" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2905680871.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/35490167/" title="破墓">
<img alt="破墓" class="" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905896429.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/35410336/" title="噬血芭蕾">
<img alt="噬血芭蕾" class="" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2907891933.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/35611467/" title="老狐狸">
<img alt="老狐狸" class="" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2898513142.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/30359440/" title="黄雀在后!">
<img alt="黄雀在后!" class="" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2905336155.jpg" width="75"/>
</a>
<a class="nbg" href="https://movie.douban.com/subject/35750081/" title="美国内战">
<img alt="美国内战" class="" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2908735043.jpg" width="75"/>
</a>

4.3 使用CSS选择器查找标签

获取 class=“nbg” 的子标签第一项 img 的图片地址

print(soup.select('.nbg > img')[0]['src'])

结果:

https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2908456064.jpg

4.4 遍历所有文本内容

for string in soup.stripped_strings:print(string)

结果:

豆瓣电影排行榜
登录/注册
下载豆瓣客户端
豆瓣
6.0
全新发布
×
豆瓣
扫码直接下载
iPhone
·
Android
豆瓣
读书
电影
音乐
同城
小组
阅读
FM
时间
......

这篇关于11.爬虫---BeautifulSoup安装并解析爬取数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039693

相关文章

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步