15分钟学 Python 第31天 :Web Scraping
Day 31:Web Scraping
1. Web Scraping 概述
Web Scraping(网页抓取)是一种自动提取网站数据的技术。它常用于从网页中收集信息,对数据进行分析和处理。无论是获取产品价格、市场调研,还是收集新闻信息,Web Scraping都有着广泛的应用。
1.1 Web Scraping 的应用场景
| 应用场景 | 说明 |
|---|---|
| 数据采集 | 定期从网站提取最新数据 |
| 媒体内容抓取 | 收集新闻文章、博客文章 |
| 价格监控 | 追踪产品价格,竞争对手的动态 |
| 市场研究 | 收集消费者评论、产品信息 |
| 研究数据收集 | 集合用于科学研究或分析的数据 |
2. Web Scraping 的工具
进行Web Scraping需要一些工具和库,以下是Python中常用的几个库:
| 库名 | 作用 |
|---|---|
| Requests | 处理HTTP请求,获取网站HTML内容 |
| Beautiful Soup | 解析HTML和XML,提取数据 |
| lxml | 更高效的HTML/XML解析库 |
| Scrapy | 完整的Web Scraping框架 |
| Selenium | 自动化浏览器操作,抓取动态网页内容 |
3. 使用 Requests 和 Beautiful Soup 进行Web Scraping
3.1 安装所需库
首先,确保您已安装requests和beautifulsoup4库。可以使用以下命令安装:
pip install requests beautifulsoup4
3.2 基本流程
进行Web Scraping的一般步骤如下:
- 使用Requests库获取网页内容。
- 使用Beautiful Soup解析网页。
- 提取所需的数据。
- 保存数据(例如,存入CSV文件、数据库等)。
4. 示例代码
以下是一个简单的Web Scraping示例,抓取一个示例网站的标题和链接。
4.1 示例网站
假设我们要抓取以下网站的数据:
示例网站:http://quotes.toscrape.com/
4.2 示例代码
import requests
from bs4 import BeautifulSoup# 1. 发送HTTP请求并获取网页内容
url = 'http://quotes.toscrape.com/'
response = requests.get(url)# 检查请求是否成功
if response.status_code == 200:# 2. 解析网页内容soup = BeautifulSoup(response.text, 'html.parser')# 3. 提取所需数据quotes = soup.find_all('div', class_='quote')# 存储结果result = []for quote in quotes:text = quote.find('span', class_='text').get_text()author = quote.find('small', class_='author').get_text()result.append({'text': text, 'author': author})# 4. 打印提取的数据for item in result:print(f"Quote: {item['text']} - Author: {item['author']}")
else:print(f"Failed to retrieve the page. Status code: {response.status_code}")
4.3 代码运行流程图
以下是该示例代码的运行流程图:
+-------------------+
| 发送HTTP请求 |
| 获取网页内容 |
+---------+---------+|v
+---------+---------+
| 解析网页内容 |
+---------+---------+|v
+---------+---------+
| 提取所需的数据 |
+---------+---------+|v
+---------+---------+
| 打印或保存数据 |
+-------------------+
5. 处理复杂情况
5.1 动态网页
对于JavaScript生成的动态网页,使用Selenium库更为合适,因为它可以操控浏览器以模拟用户操作。
5.1.1 安装 Selenium
pip install selenium
5.1.2 示例代码
from selenium import webdriver
from selenium.webdriver.common.by import By# 启动浏览器
driver = webdriver.Chrome() # 确保您已安装Chrome浏览器和对应的ChromeDriver# 访问网站
driver.get('http://quotes.toscrape.com/js/')# 找到元素并提取数据
quotes = driver.find_elements(By.CLASS_NAME, 'quote')for quote in quotes:text = quote.find_element(By.CLASS_NAME, 'text').textauthor = quote.find_element(By.CLASS_NAME, 'author').textprint(f"Quote: {text} - Author: {author}")# 关闭浏览器
driver.quit()
6. 常见问题及最佳实践
-
避免过于频繁的请求:向同一个网站发送过多请求可能被服务器屏蔽。建议使用
time.sleep()函数设置请求间隔。 -
使用代理:通过使用代理来进行Scraping可以避免IP被封。
-
遵守robots.txt:在抓取之前查看网站的
robots.txt文件,确保您的行为没有违反网站政策。
7. 练习题
- 使用Requests和Beautiful Soup抓取另一种类型的网站数据(如电影网站的电影评分和评价)。
- 将抓到的数据保存为CSV文件。
- 试着使用Selenium抓取具有动态加载内容的网站。
8. 总结
Web Scraping是一项强大的技能,能帮助您从网络中收集和分析数据。通过掌握Requests和Beautiful Soup等工具,您可以高效地获取所需信息。记住在使用Web Scraping时要遵守相关法律法规和网站的规定,维护良好的网络环境。

怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!
相关文章:
15分钟学 Python 第31天 :Web Scraping
Day 31:Web Scraping 1. Web Scraping 概述 Web Scraping(网页抓取)是一种自动提取网站数据的技术。它常用于从网页中收集信息,对数据进行分析和处理。无论是获取产品价格、市场调研,还是收集新闻信息,We…...
前端编程艺术(2)----CSS
目录 1.CSS 2.CSS引入 3.选择器 1.标签选择器 2.类选择器 3.id选择器 4.属性选择器 5.后代选择器 5.直接子元素选择器 6.伪类选择器 链接相关 动态伪类 结构化伪类 否定伪类 其他伪类 UI元素状态伪类 4.字体 1.font-family 2.font-size 3.font-style 4.fo…...
前端的全栈混合之路Meteor篇(二):RPC方法注册及调用
在Meteor 3.0中,RPC(远程过程调用)机制是实现前后端数据交互的重要特性。通过RPC,前端可以轻松调用后端方法(Methods)并获取数据,而后端的逻辑也可以同步或异步执行并返回结果。本文将详细介绍M…...
重学SpringBoot3-集成Redis(三)之注解缓存策略设置
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(三)之注解缓存策略设置 1. 引入 Redis 依赖2. 配置 RedisCacheManager 及自定义过期策略2.1 示例代码:自定…...
【C++11】新特性
前言: C11 是C编程语言的一个重要版本,于2011年发布。它带来了数量可观的变化,包含约 140 个新特性,以及对 C03 标准中约600个缺陷的修正,更像是从 C98/03 中孕育出的新语言 列表初始化 C11 中的列表初始化࿰…...
【游戏模组】重返德军总部2009高清重置MOD,建模和材质全部重置,并且支持光追效果,游戏画质大提升
各位好,今天小编给大家带来一款新的高清重置MOD,本次高清重置的游戏叫《重返德军总部2009》2009年发布,我相信很多玩家已经玩过了,如果你还没有玩过我也可以和你简单介绍一下剧情,这款游戏故事背景接续在《重返德军总部…...
CGLib动态代理和JDK动态代理Demo、ASM技术尝鲜
本文主要介绍CGLib和JDK动态代理的使用,不对源码进行深入分析。代码可直接复制使用。 类型 机制 回调方式 适用场景 效率 JDK动态代理 委托机制。代理类和目标类都实现了同样的接口。InvocationHandler持有目标类。代理类委托InvocationHandler去调用目标类原…...
[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型
【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,可以通过一些间接的方法来实现这一目标&#x…...
python you-get下载视频
You-Get是一个使用Python开发的命令行工具,用于下载网络上的音视频资源。你可以通过pip安装You-Get,具体操作如下: 打开命令行工具,输入pip install you-get,然后回车执行命令 You-Get还允许你指定下载的视频格式和质…...
SCUC博客摘录「 储能参与电能市场联合出清:SCUC和SCED模型应用于辅助服务调频市场(IEEE39节点系统)」2024年10月6日
2.1 SCUC模型在本方法中,首先利用SCUC模型确定机组出力计划和储能充放电计划。SCUC模型是电力系统经济调度的重要工具,通过优化发电机组出力计划和调度,实现电力系统的经济性和可靠性。在考虑储能的情况下,SCUC模型需要考虑储能的…...
Git分支-团队协作以及GitHub操作
Git分支操作 在版本控制过程中,同时推进多个任务> 程序员开发与开发主线并行,互不影响 分支底层也是指针的引用 hot-fix:相当于若在进行分支合并后程序出现了bug和卡顿等现象,通过热补丁来进行程序的更新,确保程序正常运行 常…...
力扣刷题 | 两数之和
目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 给定一个整数数组 nums 和…...
[C#]winform部署官方yolov11-obb旋转框检测的onnx模型
【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov11-obb(You Only Look Once version 8 with Oriented Bounding Boxes)是一种先进的对象检测算法,它在传统的Yolov3和Yolov4基础上进行了优化,加…...
【GC日志和OOM日志分析】JVM GC日志和OOM Dump文件分析
1 缘起 充电、充电、充电。 增加一些必备的知识,帮助后续使用。 2 配置JVM参数 为分析GC日志以及OOM相关信息,配置JVM参数,分为三个部分: (1)堆内存,包括年轻代、最大堆内存; &a…...
【电路】1.1 实际电路和电路模型
1.1 实际电路和电路模型 科学理论的研究对象是现实世界背后的抽象世界,如: 数学中的 ∞ \infty ∞,经典力学中“质点”的概念,牛顿运动定律(如惯性定律,如果一个物体不受外力情况下,一直保持匀…...
Vue - 打包部署
vscode找到NPM脚本,点击build。 目录下出现dist目录则表示安装成功。 安装Nginxnginx: download 目录用途conf配置文件目录html静态资源文件目录logs日志文件目录temp临时文件目录 将刚刚打包好的文件放到html目录下。 点击nginx.exe,用localhost:默认…...
spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
文章目录 【README】【1】文件上传与MultipartResolver【1.1】使用MultipartResolver进行文件上传【1.2】springmvc处理multipart多部件请求流程【1.3】使用springmvc上传文件代码实现(springmvc6.10版本): 【2】Handler与HandlerAdaptor&…...
springboot项目中属性的使用优先级;maven编译插件切换环境变量
概述 在项目部署时,相关的生产环境和测试环境是分开的,但是代码是同一套; 所以一般会有多套变量; 项目中默认变量(一般是测试环境) 线上变量(线上数据较敏感,一般也不会放在代码中&…...
【Qt】控件概述 (1)—— Widget属性
控件概述 1. QWidget核心属性1.1核心属性概述1.2 enable1.3 geometry——窗口坐标1.4 window frame的影响1.4 windowTitle——窗口标题1.5 windowIcon——窗口图标1.6 windowOpacity——透明度设置1.7 cursor——光标设置1.8 font——字体设置1.9 toolTip——鼠标悬停提示设置1…...
(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践
学员闯关手册:https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频:https://www.bilibili.com/video/BV1cU411S7iV/ 课程文档: https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/Prompt 关…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
