Day32.爬虫基础之BeautifulSoup

最新Python爬虫实战(入门爬虫篇)——案例16:2345天气网城市天气预报数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释) 本次案例通过 Python 爬虫技术,成功实现了对 2345 天气网城市 15 天天气预报数据的批量爬取与 Excel 保存。代码采用模块化设计,包含网页请求、HTML 解析、数据清洗、Excel 持久化等完整流程;通过配置模拟浏览器的请求头,有效规避基础反爬策略,保证请求的稳定性。整个爬虫逻辑遵循 “网页请求 → HTML 解析 → 提取天气信息 → 保存到 Excel” 的标准流程,与静态网页爬取范式高度一致。 阅读详情

爬虫基础之BeautifulSoup



前言

本文主要展示了BeautifulSoup库的一些基础知识以及常见使用。


一. BeautifulSoup 基本操作

1.1 解析库

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup, “html.parser”)Python的内置标准库、执行速度适中 、文档容错能力强Python 2.7.3 or 3.2.2)前的版本中文容错能力差
lxml HTML 解析器BeautifulSoup(markup, “lxml”)速度快、文档容错能力强需要安装C语言库
lxml XML 解析器BeautifulSoup(markup, “xml”)速度快、唯一支持XML的解析器需要安装C语言库
html5libBeautifulSoup(markup, “html5lib”)最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档速度慢、不依赖外部扩展

1.2 基本使用

from bs4 import BeautifulSoup

html = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    <p class="title" name="dromouse"><b>The Dormouse's story</b></p>
    <p class="story">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</p>
    <p class="story">...</p>
"""

soup = BeautifulSoup(html, 'lxml')
print(soup.prettify())  # 自动调整 html 的格式
print(soup.title.string)  # 得到 title 的内容

1.3 标签选择器

# 获取名称
print(soup.title.name)

# 获取属性
print(soup.p.attrs['name'])
print(soup.p['name'])

# 获取内容
print(soup.p.string)  # 获取 p 标签里面的字符串

# 嵌套选择
print(soup.head.title.string)  # 获取深层里面的文本

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ #
# 子节点和子孙结点

html = """
<html>
    <head>
        <title>The Dormouse's story</title>
    </head>
    <body>
        <p class="story">
            Once upon a time there were three little sisters; and their names were
            <a href="http://example.com/elsie" class="sister" id="link1">
                <span>Elsie</span>
            </a>
            <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> 
            and
            <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
            and they lived at the bottom of a well.
        </p>
        <p class="story">...</p>
"""
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'lxml')
print(soup.p.contents)  # p 标签的所有子标签的内容以列表形式返回


print(soup.p.children)
for i, child in enumerate(soup.p.children):
    print(i, child)  # 迭代器 输出

print(soup.p.descendants)
for i, child in enumerate(soup.p.descendants):  # 获取子孙结点(迭代输出)
    print(i, child)

# 父节点和祖先节点
print(soup.a.parent)
print(list(enumerate(soup.a.parents)))


# 兄弟结点
print(list(enumerate(soup.a.next_siblings)))  # 后面的兄弟结点(同一等级)
print(list(enumerate(soup.a.previous_siblings)))  # 前面的兄弟结点。

二. BeautifulSoup 高级操作

2.1 标准选择器

find_all( name , attrs , recursive , text , **kwargs ) 可根据标签名、属性、内容查找文档

# name

html='''
<div class="panel">
    <div class="panel-heading">
        <h4>Hello</h4>
    </div>
    <div class="panel-body">
        <ul class="list" id="list-1">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
        </ul>
    </div>
</div>
'''
soup = BeautifulSoup(html, 'lxml')

print(soup.find_all('ul'))  # 用标签名查找
print(type(soup.find_all('ul')[0]))

for ul in soup.find_all('ul'):
    print(ul.find_all('li'))

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ #

# attrs

print(soup.find_all(attrs={'id': 'list-1'}))  # 传入字典形式的值
print(soup.find_all(attrs={'name': 'elements'}))

print(soup.find_all(id='list-1'))  # 直接用标签计算
print(soup.find_all(class_='element'))

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ #

# text

print(soup.find_all(text='Foo'))  # 查找文本为啥,特定查找

find( name , attrs , recursive , text , **kwargs ) find返回单个元素,find_all返回所有元素.

print(soup.find('ul'))
print(type(soup.find('ul')))
print(soup.find('page'))
  1. find_parents() find_parent()
    find_parents()返回所有祖先节点,find_parent()返回直接父节点。

  2. find_next_siblings() find_next_sibling()
    find_next_siblings()返回后面所有兄弟节点,find_next_sibling()返回后面第一个兄弟节点。

  3. find_previous_siblings() find_previous_sibling()
    find_previous_siblings()返回前面所有兄弟节点,find_previous_sibling()返回前面第一个兄弟节点。

  4. find_all_next() find_next()
    find_all_next()返回节点后所有符合条件的节点, find_next()返回第一个符合条件的节点.

  5. find_all_previous() 和 find_previous()
    find_all_previous()返回节点后所有符合条件的节点, find_previous()返回第一个符合条件的节点.

2.2 CSS选择器

通过select()直接传入CSS选择器即可完成选择.

print(soup.select('.panel .panel-heading'))
print(soup.select('ul li'))
print(soup.select('#list-2 .element'))
print(type(soup.select('ul')[0]))

for ul in soup.select('ul'):
    print(ul.select('li'))

# 获取属性
for ul in soup.select('ul'):
    print(ul['id'])  # 获取属性
    print(ul.attrs['id'])

# 获取内容
for li in soup.select('li'):
    print(li.get_text())  # 获取文本 get_text()

2.3 总结

  • 推荐使用lxml解析库,必要时使用html.parser
  • 标签选择筛选功能弱但是速度快
  • 建议使用find()、find_all() 查询匹配单个结果或者多个结果
  • 如果对CSS选择器熟悉建议使用select()
  • 记住常用的获取属性和文本值的方法

总结

今天主要是学习了BeautifulSoup的简单使用以及常见属性解析的具体操作,还是需要不断的去实战练习。对于这个BeautifulSoup库感兴趣的小伙伴,可以去看官方文档的,哪里有更多详细的介绍。

溜了溜了,脑壳疼。Loading(32/100)。。。

5G-A无源物联网:深度解析“不插电“智能的底层技术原理 北京移动推出5G-A无源物联网技术,实现电动车标签"零功耗"运行。该技术通过射频能量收集(利用5G-A基站高功率信号转换为电能)和反向散射通信(调制反射信号传输数据)两大核心技术,使设备无需电池即可工作。5G-A相比4G在信号能量密度、通信速率和定位精度等方面显著提升,结合通感一体等创新技术,为无源物联网提供商用基础。该方案已在北京小区试点应用,实现电动车精准定位管理,标签寿命可达5年以上。专家预测,这项技术将大幅降低物联网部署成本,推动"万物智联"时代的到来。 阅读详情

相关推荐

ENVI+SARscape实战:从哨兵一号数据到地震形变制图全流程解析

本文详细解析了使用ENVI和SARscape软件从哨兵一号数据生成地震形变图的全流程,包括数据获取、干涉处理、相位解缠等关键步骤。通过实战技巧和参数设置建议,帮助用户高效处理SAR数据,提升地震形变监测的精度和可视化效果。

weixin_30460489的博客 385

java soup_BeautifulSoup 使用

测试页面地址下载网页import requestsurl = 'https://reeoo.com/'with open('web.html', encoding='utf8', mode='w+') as f:f.write(requests.get(url).text)构造soup对象测试输出from bs4 import BeautifulSoupwith open('web.html',...

weixin_29981095的博客 1747

一文看懂分布式存储架构

目录一、集中存储结构二、分布式存储1 、分布式存储的兴起2 、分布式存储的重要性3 、分布式存储的种类和比较三、分布式理论浅析1 、一致性和可用性2 、数据分布3 、复制4 、分布式协议5、跨机房部署四、分布式文件系统1、 Google 文件系统( GFS )2、 Taobao 文件系统( TFS )3、 Fackbook Haystack 文件系统4、 CDN 内容分发网络五、分布式键值系统1、 Amazon Dynamo2、 Taobao Tiar3、 ETCD4 、产品选型比较( Etcd , Zoo

weixin_70730532的博客 2万+

BeautifulSoup

BeautifulSoup简介 BeautifulSoup可以用来从HTML或XML文件中提取数据 创建BeautifulSoup对象 第一种 直接通过字符串创建 soup = BeautifulSoup(html_str,'lxml',from_encoding="utf-8") 第二种 将字符串保存为html文件 soup = BeautifulSoup(open('index....

这里的分享,都是干货 698

NVIDIA DGX Spark 深度应用解析:从大模型训练到边缘推理的完整实践指南

内存管理:充分利用统一内存架构,避免不必要的数据传输批处理大小:根据模型大小调整批处理大小以优化内存使用精度选择:在精度损失可接受范围内使用较低精度计算流水线优化:重叠计算和数据传输操作DGX Spark作为一个专门的AI计算平台,在大模型开发的各个阶段都能发挥重要作用。从数据预处理到模型训练,从微调到推理部署,其统一内存架构和强大的计算能力为AI开发者提供了前所未有的本地开发体验。需要注意的是,虽然DGX Spark性能强大,但合理的算法设计和系统优化仍然是获得最佳性能的关键。

time_days的博客 2871

I-Cache 和 D-Cache

I-Cache 和 D-Cache

liuyuanbin9001 7022

java 爬 维基百科_urllib和BeautifulSoup爬取维基百科的词条简单实例

本文实例主要实现的是使用urllib和BeautifulSoup爬取维基百科的词条,具体如下。简洁代码:#引入开发包from urllib.request import urlopenfrom bs4 import BeautifulSoupimport re#请求URL并把结果用UTF-8编码resp=urlopen("https://zh.wikipedia.org/wiki/Wikipedi...

weixin_42554408的博客 494

pgpool-II踩坑日记两则

最近结合pgpool-II进行postgreSQL高可用的部署,过程非常煎熬,作为新手,公司也没有前辈熟悉postgreSQL,只能自己摸索。好在已经搞明白了,把困扰我很长时间的两个问题分享一下。 1. show pool_nodes 第一个问题就是 show pool_nodes 的使用,照着教程建好后,在哪里执行这个指令呢?我在pg服务器上怎么执行这个指令都显示 ERROR: unrecognized configuration parameter "pool_nodes",一度怀疑人生。翻阅了很多资料

zhaizhai6_6的博客 4540

网络爬虫--BeautifulSoup4库

网络爬虫之beautifulsoup4库用法介绍

zid_user01的博客 178

VMware共享磁盘配置实战:从零搭建多机共享存储环境

本文详细介绍了在VMware环境中从零开始配置共享磁盘的完整实战流程。通过创建共享磁盘、挂载至多台虚拟机并修改.vmx配置文件等关键步骤,帮助用户搭建可用于数据库集群(如Oracle RAC)测试的多机共享存储环境,并提供了核心参数设置与常见问题排查指南。

weixin_29284201的博客 492

从FinFET到NanoSheet:一文看懂TSMC制程技术的架构革命与性能飞跃

本文深入解析了TSMC从FinFET到NanoSheet的制程技术架构革命。FinFET通过三维立体结构解决了短沟道效应,而NanoSheet采用环绕栅极设计,实现了更强的静电控制与设计灵活性,结合EUV光刻技术,共同推动了芯片性能与能效的飞跃,为下一代AI与高性能计算奠定基石。

i3j4k5的博客 288

BeautifulSoup入门

BeautifulSoup库入门 BeautifulSoup库的理解 BeautifulSoup库是解析、遍历、维护”标签树”的功能库 示例代码: from bs4 import BeautifulSoup soup = BeautifulSoup("<html>data</html>","html.parser")#第一参数是html文档,第二个参...

weixin_30576859的博客 137

1.2 amdgpu_bo的设计分析 — gem层和ttm层

本文分析了AMD KFD的BO设计架构,重点介绍了DRM子系统中缓冲对象的多层继承关系。文章首先展示了核心继承层次图,包括DRM通用层(drm_gem_object)、TTM内存管理层(ttm_buffer_object)、AMD驱动层(amdgpu_bo)和KFD计算层(kgd_mem)。随后详细解析了drm_gem_object结构体的关键功能,包括用户空间接口管理、内存映射支持、引用计数机制以及DMA-BUF导入/导出功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2548

python网络爬虫基础day02

  2019.5.15,今天继续跟着波波老师学习爬虫开发。主要学了数据解析,总结今天学的知识: 聚焦爬虫:爬取页面中指定的页面内容。 -编码流程: - 指定urL发起请求 - 获取响应数据 - 数据解析 - 持久化存储数据解析分类: - 正则 - bs4 - xpath(重点)数据解析原理概述: - 解析的局部...

weixin_30410999的博客 259

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python数据分析与爬虫实战:从零基础到项目实战的完整学习路径

Python作为一门高级、解释型、通用且开源的编程语言,以其简洁的语法和强大的生态,成为数据科学和自动化领域的首选工具。其核心原理在于通过丰富的第三方库,如NumPy、Pandas和Requests,高效处理数据采集、清洗与分析任务。掌握Python的数据处理能力,对于提升个人技术栈和解决实际业务问题具有重要价值,尤其在数据分析、网络爬虫等应用场景中。本文聚焦于构建一条清晰的学习路径,通过环境搭建、核心语法讲解,并结合豆瓣电影Top250爬虫与天气数据分析等实战项目,系统性地串联起Python在数据获取与处

weixin_30882895的博客 314

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python爬虫基础:Day3

soup.find('tagName',class_/id/attr='song') :通过属性定位某个节 soup.find_all('tagName') : 返回符合要求的所有节点(列表)soup.find('tagName') : 返回的是文档中第一次出现的tagName对应的节点。soup.tagName : 返回的是文档中第一次出现的tagName对应的节点。tag.text /tag.get_text() : 可以获取当前标签中所有的文本内容。tag['属性名']

weixin_45906368的博客 372

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

爬虫Day3 数据解析bs4,xpath

数据解析 1 聚焦爬虫 爬取页面中指定内容数据 2 数据解析 1.正则表达式 2.bs4 3.xpath(重点) 3 数据解析的原理 解析的数据内容都会在标签之间或者标签对应的属性之间进行存储,那如果定位到指定的标签,再对标签或者标签的属性进行提取(解析) 4 流程 1.指定url 2.UA伪装 3.获得响应数据 4.数据解析 5.持久化存储 5 实战:爬取图片数据 在糗事百科上照一张图,获取地址url import requests import os if __name__ == "__main__"

weixin_43955530的博客 388

Python学习Day15---Python计算生态简介、霍兰德人人格分析实例

#Python计算生态 '''Python库之数据分析 1、Numpy:表达N维数组的最基础库 C语言实现,Python接口使用,计算速度优异,且支持Python数据分析及科学计算的基础库支持Pandas等 提供质检的矩阵运算、广播函数、线性代数等功能 2、Pandas库:Python数据分析高层次应用库 提供了简单易用的数据结构和数据分析工具 理解数据类型与索引的...

weixin_44823151的博客 378

day2-requests和bs4

day2-requests和bs4 requests使用方法 # requests:python基于http协议进行网络请求的第三方库 import requests """1. 发送请求 requests.get(url, *, headers, params, proxies) - 发送get请求 requests.post(url, *, headers, params, proxies) - 发送post请求 参数: url - 请求地址(一个网站的网址、接口的地址

weixin_48423550的博客 662

哈尔滨 python_python爬虫抓取哈尔滨天气信息(静态爬虫)

python 爬虫 爬取哈尔滨天气信息 - http://www.weather.com.cn/weather/101050101.shtml环境:windows7python3.4(pip install requests;pip install BeautifulSoup4)代码:(亲测可以正确执行)1 #coding:utf-82 """3 总结一下,从网页上抓取内容大致分3步:4 1、模拟...

weixin_39725118的博客 222

使用爬虫爬取天气历史数据(https://lishi.tianqi.com/)

目标:获取https://lishi.tianqi.com/这个页面中所有城市在2021.1~2021.7的历史天气数据 一、获取爬虫头: import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent import os import random from bs4 import BeautifulSoup import time import socket impor...

leokingszx的博客 5079

Python爬虫实战:天气数据采集与可视化分析

网络爬虫作为数据采集的核心技术,通过模拟浏览器行为自动获取网页数据。其工作原理主要基于HTTP协议请求响应机制,配合HTML解析器提取结构化信息。在数据科学领域,爬虫技术能快速构建原始数据集,为后续分析提供原料支撑。以天气数据为例,这类时序数据具有标准化程度高、维度丰富等特点,非常适合用于Python数据分析练手项目。通过requests+BeautifulSoup技术栈实现数据采集,结合pandas进行数据清洗,最终利用matplotlib/seaborn完成可视化呈现,形成完整的数据分析闭环。项目中涉及

weixin_34013044的博客 414

DAY-01

上午: 一、爬虫基本原理 1. 什么是爬虫? 爬取数据 2. 什么是互联网? 由一堆网络设备,把一台台的计算机互联到一起 3. 互联网建立的目的 数据的传递与分享 4. 什么是数据? 例如:电商平台的商品信息 链家、自如的房源信息 股票证券投资信息(雪球网,东方财富) 12306的票务信息 5. 什么是上网? 普通用...

weixin_30270889的博客 383

Python数据分析案例32——财经新闻爬虫和可视化分析

财经新闻的爬虫案例,分析可视化

weixin_46277779的博客 6119

Day03 爬取京东商品信息+元素交互操作+BeautifulSoup4

一、 先在京东搜索墨菲定律,然后对页面上的商信息进行爬取: 1 from selenium import webdriver 2 import time 3 from selenium.webdriver.common.keys import Keys # 键盘按键操作 4 5 driver = webdriver.Chrome() 6 num = 1 ...

bangbiyi8416的博客 367
上一篇: Day31.爬虫基础之re
下一篇: Day33.爬虫基础之PyQuery
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值