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
时间
......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/687457.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 安装调试 TelephonyProvider不生效

直接安装TelephonyProvider的时候&#xff0c;&#xff08;没有重启&#xff09;发现数据库没有生效。 猜测应该是原本的数据库没有删除后重建更新。 解决方法&#xff1a;杀掉phone进程 adb shell am force-stop com.android.phone 查看device进程 adb shell ps | grep <…

AI视频教程下载:用LangChain开发 ChatGPT和 LLMs 应用

在这个快速变化的人工智能时代&#xff0c;我们为您带来了一场关于语言模型和生成式人工智能的革命性课程。这不仅仅是一个课程&#xff0c;而是一次探险&#xff0c;一次深入人工智能核心的奇妙之旅。 在这里&#xff0c;您将开启一段激动人心的旅程&#xff0c;探索语言模型…

【必会面试题】JVM内存分区?垃圾回收(GC)算法?如何处理OOM?

目录 JVM分区模型GC&#xff08;垃圾回收&#xff09;算法&#xff1a;处理OOM&#xff08;Out Of Memory&#xff09;&#xff1a; JVM分区模型 JVM&#xff08;Java虚拟机&#xff09;内存划分为多个区域&#xff0c;以支持其运行时环境和对象的生命周期管理。以下是主要的内…

Linux磁盘分区(fdisk)和卷管理详解(VG-LV-PV)

先看整体图&#xff0c;再讲解概念 一、磁盘分区 一个磁盘disk可以分多个区part&#xff0c;用fdisk命令&#xff0c;举例把/dev/vdb划分为/dev/vdb1和/dev/vdb2 二、创建虚拟卷 LVM是逻辑盘卷管理&#xff08;Logical Volume Manager&#xff09;的简称&#xff0c;他是磁盘…

vue数组在浏览器里可以看到值, 但是length为空

arr数组 length为0, 检查了代码在created 里调用了 this.getEnergyList(); 和 this.initChart(); 问题就在这里, this.initChart用到了getEnergyList里的数据, 造成了数据异步, 把this.initChart(); 放入 this.getEnergyList(); 方法里即可解决问题

如何在没有密码的情况下解锁iPhone

通常&#xff0c;您可以使用密码、FaceID 或 Touch ID 轻松解锁 iPhone。但是&#xff0c;有时您可能会忘记密码、iPhone 已停用或您的二手手机已锁定。在这种情况下&#xff0c;您必须绕过 iPhone 密码才能访问您的设备。在本文中&#xff0c;我们将向您介绍 5 种经过测试的方…

一文搞懂DevOps、DataOps、MLOps、AIOps:所有“Ops”的比较

引言 近年来&#xff0c;“Ops”一词在 IT 运维领域的使用迅速增加。IT 运维正在向自动化过程转变&#xff0c;以改善客户交付。传统的应用程序开发采用 DevOps 实施持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;。但对于数据密集型的机器学习和人…

09.1手工制作docker镜像-多服务ssh+nginx

手工制作docker镜像-多服务sshnginx 一个容器多个服务 基于centos6.9系统添加yum源与epel源 安装nginx、ssh服务 yum install nginx openssh-server -y因镜像系统为纯系统&#xff0c;没有root密码&#xff0c;所以需要配置密码 echo 123456 | passwd --stdin root注&#x…

iPhone 16 Pro 将打破智能手机上最窄边框的记录

iPhone 16 Pro 据悉&#xff0c;苹果即将发布的 iPhone 16 Pro 将拥有令人瞩目的超窄边框设计&#xff0c;这一创新将超越目前市场上所有智能手机的边框宽度&#xff0c;甚至相较于其前代产品 iPhone 15 Pro 而言也更为出色。 根据多方消息透露&#xff0c;虽然整体设计变化…

Python一些小操作

矢量图 from matplotlib_inline import backend_inline backend_inline.set_matplotlib_formats(svg)matplotlib中文问题 import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"]["SimHei"] #设置字体 plt.rcParams["axes.unicode_minus…

[数据集][目标检测]盲道检测数据集VOC+YOLO格式2173张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2173 标注数量(xml文件个数)&#xff1a;2173 标注数量(txt文件个数)&#xff1a;2173 标注…

室内外融合定位是如何做到成为定位领域的新宠

在信息化高速发展的今天&#xff0c;定位技术已成为人们生活和工作中不可或缺的一部分。随着物联网、智慧城市等领域的蓬勃发展&#xff0c;传统的单一定位方式已无法满足复杂多变的环境需求。在这样的背景下&#xff0c;室内外融合定位技术应运而生&#xff0c;以其独特的优势…

RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析

RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析 摘要&#xff1a;本文将基于RockPI 4A单板&#xff0c;介绍Linux 4.4内核下RK3399 GPIO&#xff08;通用输入输出&#xff09;功能的使用方法。通过详细的代码解析和示例&#xff0c;帮助读者理解如何在Linux内核中使用GPI…

Docker部署深度学习模型

基础概念 Docker Docker是一个打包、分发和运行应用程序的平台&#xff0c;允许将你的应用程序和应用程序所依赖的整个环境打包在一起。比如我有一个目标检测的项目&#xff0c;我想分享给朋友&#xff0c;那么他首先需要在自己的电脑上配置好显卡驱动、CUDA、CuDNN&#xff…

探索多头混合专家(MH-MoE)模型的先进架构

在深度学习领域&#xff0c;大型模型如大型语言模型&#xff08;LLMs&#xff09;和大型多模态模型&#xff08;LMMs&#xff09;因其在各个领域的有效性而受到广泛关注。然而&#xff0c;这些模型在训练和推理时面临着巨大的计算成本。为了解决这一问题&#xff0c;研究者们提…

微服务框架下,因发送端与消费端的vhost不一致,导致rabbitmq出现严重的消息堆积

一、背景 在生产环境下&#xff0c;rabbitmq机器出现磁盘空间不足的报警&#xff0c;发现是某个队列的消息只有生产&#xff0c;迟迟没有消费。 可以得到的信息是&#xff1a; 队列queue是data_center_file_change_queue队列绑定的交换机是resourceChangeExchange&#xff0c…

【画板案例-线宽 Objective-C语言】

一、接下来,我们来说这个,线宽, 1.示例程序里边,这个slider,是改变线宽的,在最左边的时候,我画一下, 是这种线宽,还是有一定宽度的啊,跟我们这个默认的,不是1像素, 然后,最右边呢,也是有一个宽度的, 然后呢,这个线宽,我就给它,最小值设置成5,最大值设置成3…

淘宝扭蛋机小程序,扭蛋市场创新模式

扭蛋机作为潮玩市场的娱乐消费方式&#xff0c;成为了当下消费者的新宠。扭蛋机凭借自身性价比高、商品多样、惊喜性等特点&#xff0c;吸引了各个年龄层的消费者&#xff0c;不仅年轻人喜欢&#xff0c;不少小学生和老年人也非常喜欢&#xff0c;扭蛋机市场迎来了快速发展期。…

【学习笔记】Windows GDI绘图(十二)双缓冲管理(用GIF动画测试)

文章目录 引言默认双缓冲SetStyle 手动管理双缓冲图形BufferedGraphicsManager缓冲图形管理器BufferedGraphicsContext 缓冲图形上下文BufferedGraphics 图形缓冲区验证双缓冲的效果(Gif动画显示非正常速度)结束语性能对比 引言 图形编程中一个常见的问题就是闪烁&#xff0c;…

男士内裤比较好的品牌有哪些?五款物超所值的男款内裤安利

挑选男士内裤时&#xff0c;哪一款更合适呢&#xff1f;这个问题想必让许多人感到困惑。现在市场上的男士内裤种类繁多&#xff0c;确实让人眼花缭乱&#xff0c;不知从何下手。为了帮助大家解决这一难题&#xff0c;今天特地为大家整理了一些选购男士内裤的技巧&#xff0c;并…