使用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数据抓取与清洗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows 8.1 64bit下搭建 Scrapy 0.22 环境

    Windows 8.1 64bit下搭建 Scrapy 0.22 环境

    这篇文章主要介绍了Windows 8.1 64bit下搭建 Scrapy 0.22 环境,需要的朋友可以参考下
    2018-11-11
  • 深入解析Python中BeautifulSoup4的基础知识与实战应用

    深入解析Python中BeautifulSoup4的基础知识与实战应用

    BeautifulSoup4正是一款功能强大的解析器,能够轻松解析HTML和XML文档,本文将介绍BeautifulSoup4的基础知识,并通过实际代码示例进行演示,感兴趣的可以了解下
    2024-02-02
  • python中join与os.path.join()函数实例详解

    python中join与os.path.join()函数实例详解

    os.path.join()函数用于路径拼接文件路径,下面这篇文章主要给大家介绍了关于python中join与os.path.join()函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 将tensorflow的ckpt模型存储为npy的实例

    将tensorflow的ckpt模型存储为npy的实例

    今天小编就为大家分享一篇将tensorflow的ckpt模型存储为npy的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Django 忘记管理员或忘记管理员密码 重设登录密码的方法

    Django 忘记管理员或忘记管理员密码 重设登录密码的方法

    今天小编就为大家分享一篇Django 忘记管理员或忘记管理员密码 重设登录密码的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python常见运算符及用法小结

    python常见运算符及用法小结

    python中的运算符主要包括算术运算符,关系(比较)运算符,赋值运算符,逻辑运算符,成员运算符,身份运算符,三目运算符。使用运算符将不同类型的数据按照一定的规则连接起来的式子,称为表达式。下面将介绍一些常用的运算符
    2022-08-08
  • Python结合OpenCV和Pyzbar实现实时摄像头识别二维码

    Python结合OpenCV和Pyzbar实现实时摄像头识别二维码

    这篇文章主要为大家详细介绍了如何使用Python编程语言结合OpenCV和Pyzbar库来实时摄像头识别二维码,文中的示例代码讲解详细,需要的可以参考下
    2024-01-01
  • Python实现句子翻译功能

    Python实现句子翻译功能

    这篇文章主要介绍了Python实现句子翻译功能,涉及urllib库的使用等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • python读取mnist数据集方法案例详解

    python读取mnist数据集方法案例详解

    这篇文章主要介绍了python读取mnist数据集方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • pyhton列表转换为数组的实例

    pyhton列表转换为数组的实例

    下面小编就为大家分享一篇pyhton列表转换为数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论