使用BeautifulSoup和Pandas进行网页数据抓取与清洗处理

 更新时间:2025年02月18日 15:54:45   作者:站大爷IP  
在数据分析和机器学习的项目中,数据的获取,清洗和处理是非常关键的步骤,下面我们就来讲讲如何利用Python中的Beautiful Soup库进行这样的操作吧

在数据分析和机器学习的项目中,数据的获取、清洗和处理是非常关键的步骤。今天,我们将通过一个实战案例,演示如何利用Python中的Beautiful Soup库进行网页数据抓取,并使用Pandas库进行数据清洗和处理。这个案例不仅适合初学者,也能帮助有一定经验的朋友快速掌握这两个强大的工具。

一、准备工作

在开始之前,请确保你的Python环境中已经安装了requests、beautifulsoup4和pandas库。你可以通过以下命令安装它们:

pip install requests beautifulsoup4 pandas

此外,我们需要抓取一个网页的数据作为示例。为了简单起见,我们选择了一个公开的新闻网站页面。

二、抓取网页数据

首先,我们需要使用requests库获取网页的HTML内容。然后,使用Beautiful Soup解析HTML,并提取我们感兴趣的数据。

import requests
from bs4 import BeautifulSoup
 
# 目标网页URL
url = 'https://example.com/news'  # 替换为实际的URL
 
# 发送HTTP请求获取网页内容
response = requests.get(url)
response.raise_for_status()  # 检查请求是否成功
 
# 使用Beautiful Soup解析HTML
soup = BeautifulSoup(response.text, 'html.parser')

假设我们要提取新闻标题、发布时间和正文内容。通过检查网页的HTML结构,我们发现这些信息都包含在特定的HTML标签中。

# 提取新闻标题、发布时间和正文内容
articles = []
for article in soup.select('.news-article'):  # 假设新闻文章都有class="news-article"
    title = article.select_one('h2.title').text.strip()
    publish_time = article.select_one('.publish-time').text.strip()
    content = article.select_one('.content').text.strip()
    articles.append({
        'title': title,
        'publish_time': publish_time,
        'content': content
    })

三、数据清洗

抓取到的数据通常包含一些不需要的信息,比如多余的空格、HTML标签残留、特殊字符等。我们需要对这些数据进行清洗。

import pandas as pd
 
# 将数据转换为DataFrame
df = pd.DataFrame(articles)
 
# 打印前几行数据查看
print(df.head())
 
# 数据清洗步骤
# 1. 去除字符串前后的空格(已在提取时处理)
# 2. 替换特殊字符(例如换行符为空格)
df['content'] = df['content'].str.replace('\n', ' ')
 
# 3. 删除缺失值或无效数据(假设空标题或空内容的数据无效)
df = df.dropna(subset=['title', 'content'])
 
# 4. 统一时间格式(假设发布时间为"YYYY-MM-DD HH:MM:SS"格式)
# 这里我们假设发布时间已经是字符串格式,且格式统一,如果需要转换格式,可以使用pd.to_datetime()
# df['publish_time'] = pd.to_datetime(df['publish_time'], format='%Y-%m-%d %H:%M:%S')
 
# 打印清洗后的数据查看
print(df.head())

四、数据处理

数据清洗后,我们可能还需要进行一些额外的处理,比如数据转换、数据合并、数据分组等。

# 数据处理步骤
# 1. 提取发布日期的日期部分(如果需要)
# df['publish_date'] = df['publish_time'].dt.date
 
# 2. 统计每个发布日期的新闻数量(如果需要)
# daily_counts = df['publish_date'].value_counts().reset_index()
# daily_counts.columns = ['publish_date', 'count']
# print(daily_counts)
 
# 3. 根据关键词过滤新闻(例如只保留包含"疫情"关键词的新闻)
keyword = '疫情'
filtered_df = df[df['content'].str.contains(keyword, na=False, case=False)]
 
# 打印过滤后的数据查看
print(filtered_df.head())

五、保存数据

处理完数据后,我们可能需要将其保存到文件中,以便后续使用。Pandas提供了多种保存数据的方法,比如保存为CSV文件、Excel文件等。

# 保存数据为CSV文件
csv_file_path = 'cleaned_news_data.csv'
df.to_csv(csv_file_path, index=False, encoding='utf-8-sig')
 
# 保存数据为Excel文件
excel_file_path = 'cleaned_news_data.xlsx'
df.to_excel(excel_file_path, index=False, engine='openpyxl')

六、完整代码示例

为了方便大家理解和运行,以下是完整的代码示例。请确保将url变量替换为实际的网页URL,并根据实际的HTML结构调整Beautiful Soup的选择器。

import requests
from bs4 import BeautifulSoup
import pandas as pd
 
# 目标网页URL(请替换为实际的URL)
url = 'https://example.com/news'
 
# 发送HTTP请求获取网页内容
response = requests.get(url)
response.raise_for_status()
 
# 使用Beautiful Soup解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
 
# 提取新闻标题、发布时间和正文内容
articles = []
for article in soup.select('.news-article'):  # 假设新闻文章都有class="news-article"
    title = article.select_one('h2.title').text.strip()
    publish_time = article.select_one('.publish-time').text.strip()
    content = article.select_one('.content').text.strip()
    articles.append({
        'title': title,
        'publish_time': publish_time,
        'content': content
    })
 
# 将数据转换为DataFrame
df = pd.DataFrame(articles)
 
# 数据清洗步骤
df['content'] = df['content'].str.replace('\n', ' ')
df = df.dropna(subset=['title', 'content'])
 
# 数据处理步骤(示例:根据关键词过滤新闻)
keyword = '疫情'
filtered_df = df[df['content'].str.contains(keyword, na=False, case=False)]
 
# 保存数据为CSV文件和Excel文件
csv_file_path = 'cleaned_news_data.csv'
excel_file_path = 'cleaned_news_data.xlsx'
df.to_csv(csv_file_path, index=False, encoding='utf-8-sig')
df.to_excel(excel_file_path, index=False, engine='openpyxl')
 
# 打印过滤后的数据查看
print(filtered_df.head())

七、总结

通过本文,我们学会了如何使用Beautiful Soup进行网页数据抓取,并使用Pandas进行数据清洗和处理。这两个库的结合使用可以大大提高我们处理网页数据的效率。在实际项目中,你可能需要根据具体的网页结构和数据需求调整代码。希望这个实战案例能帮助你更好地掌握这两个工具,并在你的数据分析和机器学习项目中发挥它们的作用。

到此这篇关于使用BeautifulSoup和Pandas进行网页数据抓取与清洗处理的文章就介绍到这了,更多相关BeautifulSoup Pandas数据抓取与清洗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python操作redis基础

    python操作redis基础

    Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章主要介绍了python操作redis基础,需要的朋友可以参考下
    2025-05-05
  • python可扩展的Blender 3D插件开发汇总

    python可扩展的Blender 3D插件开发汇总

    这篇文章主要为大家介绍了python可扩展的Blender 3D插件开发汇总,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Python 数据结构之十大经典排序算法一文通关

    Python 数据结构之十大经典排序算法一文通关

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存
    2021-10-10
  • 用实例说明python的*args和**kwargs用法

    用实例说明python的*args和**kwargs用法

    python的*args和**kwargs如何用,看了下面的例子你就清楚了。
    2013-11-11
  • Django中F函数的使用示例代码详解

    Django中F函数的使用示例代码详解

    这篇文章主要介绍了Django中F函数的使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python判断MySQL表是否存在的两种方法

    Python判断MySQL表是否存在的两种方法

    在数据库开发中,经常需要检查某个表是否存在,如果不存在则创建它,下面我们就来看看如何使用Python连接MySQL数据库并实现表存在性检查与创建的功能吧
    2026-02-02
  • python pandas轻松通过特定列的值多条件去筛选数据及contains方法的使用

    python pandas轻松通过特定列的值多条件去筛选数据及contains方法的使用

    这篇文章主要介绍了python pandas轻松通过特定列的值多条件去筛选数据及contains方法的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 关于Python中jieba库的使用

    关于Python中jieba库的使用

    这篇文章主要介绍了关于Python中jieba库的使用,jieba (“结巴”) 是 Python 中一个重要的第三方中文分词函数库,除了分词,jieba 还提供增加自定义中文单词的功能,需要的朋友可以参考下
    2023-04-04
  • python两个_多个字典合并相加的实例代码

    python两个_多个字典合并相加的实例代码

    这篇文章主要介绍了python两个_多个字典合并相加,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • python 实现矩阵上下/左右翻转,转置的示例

    python 实现矩阵上下/左右翻转,转置的示例

    今天小编就为大家分享一篇python 实现矩阵上下/左右翻转,转置的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01

最新评论