当前位置: 首页 > news >正文

Python编程实战 - Python实用工具与库 - 爬取并存储网页数据

在数据分析与自动化任务中,网络爬虫(Web Crawler) 是非常常见的应用场景。
Python 以其丰富的第三方库(如 requestsBeautifulSouplxmlpandas 等)成为实现爬虫的理想语言。
今天我们通过一个完整的案例,学习如何 爬取网页数据 并 保存到本地文件(Excel/CSV)


一、爬虫的基本流程

  1. 1. 发送请求:获取网页内容(HTML)
  2. 2. 解析数据:从 HTML 中提取有用信息
  3. 3. 数据清洗:去除多余字符或空白
  4. 4. 数据存储:保存为 CSV、Excel、数据库等格式

二、使用 requests 获取网页内容

requests 是 Python 最常用的网络请求库,使用起来非常简洁。

import requestsurl = "https://quotes.toscrape.com/"
response = requests.get(url)
print(response.status_code)
print(response.text[:500])  # 只看前500个字符

说明:

  • • status_code = 200 表示请求成功。
  • • response.text 为网页 HTML 内容。

三、使用 BeautifulSoup 解析网页

BeautifulSoup 是一个非常强大的 HTML 解析工具,可帮助你方便地提取网页结构中的特定内容。

from bs4 import BeautifulSouphtml = response.text
soup = BeautifulSoup(html, "html.parser")quotes = soup.find_all("div", class_="quote")for q in quotes:text = q.find("span", class_="text").get_text(strip=True)author = q.find("small", class_="author").get_text(strip=True)print(f"{author}:{text}")

输出示例:

Albert Einstein:“The world as we have created it is a process of our thinking.”
J.K. Rowling:“It is our choices that show what we truly are.”

四、提取并保存数据

我们可以将提取的数据保存到列表中,再用 pandas 转换成表格格式,最后导出 Excel/CSV 文件。

import pandas as pddata = []
for q in quotes:text = q.find("span", class_="text").get_text(strip=True)author = q.find("small", class_="author").get_text(strip=True)data.append({"作者": author, "名言": text})df = pd.DataFrame(data)
df.to_excel("名言收集.xlsx", index=False)
print("数据已保存到 名言收集.xlsx")

五、爬取多页数据

很多网站内容分页显示,可以通过分析 URL 规律实现多页爬取。

以 https://quotes.toscrape.com/page/1/ 为例,下一页是 /page/2//page/3/...

import time
import randomall_data = []for page in range(1, 6):url = f"https://quotes.toscrape.com/page/{page}/"print(f"正在爬取第 {page} 页:{url}")response = requests.get(url)soup = BeautifulSoup(response.text, "html.parser")quotes = soup.find_all("div", class_="quote")for q in quotes:text = q.find("span", class_="text").get_text(strip=True)author = q.find("small", class_="author").get_text(strip=True)all_data.append({"作者": author, "名言": text})time.sleep(random.uniform(1, 2))  # 防止请求过快被封# 保存数据
df = pd.DataFrame(all_data)
df.to_csv("quotes.csv", index=False, encoding="utf-8-sig")
print("所有页面数据已保存到 quotes.csv")

六、数据清洗与去重

爬取到的数据可能存在重复或空行,可用 Pandas 简单清洗:

df = pd.read_csv("quotes.csv")
df.drop_duplicates(inplace=True)
df.dropna(subset=["名言"], inplace=True)
df.to_csv("quotes_clean.csv", index=False, encoding="utf-8-sig")
print("清洗完成,保存为 quotes_clean.csv")

七、实战进阶:爬取并存储新闻标题

以某新闻网站为例(如新浪科技频道):

import requests
from bs4 import BeautifulSoup
import pandas as pdurl = "https://tech.sina.com.cn/"
response = requests.get(url)
response.encoding = "utf-8"
soup = BeautifulSoup(response.text, "html.parser")titles = [a.get_text(strip=True) for a in soup.find_all("a") if a.get_text(strip=True)]
data = pd.DataFrame({"新闻标题": titles})
data.to_excel("新浪科技新闻.xlsx", index=False)
print("新闻标题已保存到 新浪科技新闻.xlsx")

八、爬虫中的防封与异常处理

为了避免被网站屏蔽,建议:

  1. 1. 设置请求头(User-Agent)
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
    requests.get(url, headers=headers)
  2. 2. 控制访问频率
    使用 time.sleep() 随机等待 1~3 秒。
  3. 3. 捕获网络异常
    try:response = requests.get(url, timeout=10)response.raise_for_status()
    except requests.RequestException as e:print("请求失败:", e)

九、总结

步骤工具功能
1requests获取网页 HTML
2BeautifulSoup解析 HTML 提取数据
3pandas存储与清洗数据
4Excel/CSV数据落地保存
5time + random防止请求过快被封禁

通过以上流程,你已经可以实现一个完整的网页爬取与数据存储脚本,为后续数据分析和可视化打下基础。


http://www.dtcms.com/a/596745.html

相关文章:

  • 网站建设中字样图片wordpress首页调用文章数量
  • “基于‘多模态SCA+全周期协同’的中间件开源风险治理实践”荣获OSCAR开源+安全及风险治理案例
  • BetterDisplay Pro for Mac显示器增强工具
  • 解决huggingface下载仓库时有部分大文件不能下载的问题
  • Qt键盘组合
  • Qt中的QShortcut:高效键盘快捷方式开发指南
  • c mvc制作网站开发google谷歌
  • STM32F103RCT6+STM32CubeMX+keil5(MDK-ARM)+Flymcu完成轮询方式检测按键
  • paimon实战 -- Flink 写入 Paimon 流程深度解析
  • HOT100题打卡第35天——二分查找
  • R语言 | 带重要性相关热图和贡献图如何解释?如何绘制随机森林计算结果重要性及相关性图?[学习笔记]
  • 做 专而精 的网站网站建设个人主要事迹
  • 怎么查看一个网站是谁做的注册城乡规划师备考
  • CMake开源库的编译与使用
  • GitLab CI/CD和Arbess,开源免费CI/CD工具选型指南
  • Observability:适用于 PHP 的 OpenTelemetry:EDOT PHP 加入 OpenTelemetry 项目
  • 第二十七篇:C++20协程:异步编程的终极革命
  • 【后端】【面试】 ③ PostgreSQL高级面试题(含答案与实战案例)
  • 静态加载法
  • 规范使用指针
  • 工业实时数据库选型指南:深度解析紫金桥 vs TDengine
  • DNS主从服务器的配置
  • DDR4 4.7 Write Leveling
  • 云手机通常使用什么架构
  • 幽冥大陆(十七)手机摄像头注册到电脑——东方仙盟炼气期
  • DNS记录更新后为什么还是访问不到新服务器?
  • 高并发场景下的核心技术挑战与应对思路
  • 网站建设报价清单wordpress free cdn
  • 关于comfyui的秋叶lora-scripts训练器安装和TensorBoard显示问题
  • Docker(K8S)容器架构教程(视频教程)