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

相关文章

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Maven如何手动安装依赖到本地仓库

《Maven如何手动安装依赖到本地仓库》:本文主要介绍Maven如何手动安装依赖到本地仓库问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、下载依赖二、安装 JAR 文件到本地仓库三、验证安装四、在项目中使用该依赖1、注意事项2、额外提示总结一、下载依赖登

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析