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

相关文章

win10安装及配置Gradle全过程

《win10安装及配置Gradle全过程》本文详细介绍了Gradle的下载、安装、环境变量配置以及如何修改本地仓库位置,通过这些步骤,用户可以成功安装并配置Gradle,以便进行项目构建... 目录一、Gradle下载1.1、Gradle下载地址1.2、Gradle下载步骤二、Gradle安装步骤2.1、安

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工