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

【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)

目录

资源链接

一、网站选择

二、数据爬取要求

三、数据清洗要求

四、实现代码

1.数据采集

2.数据清洗


资源链接

下面有笔者所放的源码下载链接,读者可自行下载:

链接:https://pan.baidu.com/s/1YmTdlnbSJLvLrrx92zz6Qg 
提取码:wkk6

一、网站选择

scrapy官方提供的网站:Quotes to Scrape

二、数据爬取要求

使用requests库,获取1-10页的名人名言页面,获取名人名言和作者两项信息,结果存放到“名人名言.csv”文件中,并将文件保存在data目录下,如果目录不存在,则先创建目录.

三、数据清洗要求

读取“名人名言.csv”,数据列名为“名言”和“姓名”,删除数据项为空的数据,删除重复数据,增加“时间”列,数据为“2023-06”,结果存放到“清洗结果.csv”中,保存在data目录。

四、实现代码

1.数据采集

import requests  # 导入用于发送HTTP请求的库
from bs4 import BeautifulSoup  # 导入用于解析HTML的库
import csv  # 导入用于处理CSV文件的库
import os  # 导入用于进行操作系统相关操作的库# 定义函数 get_html,用于获取网页内容
def get_html(url, time=10):try:# 发送HTTP GET请求re = requests.get(url, timeout=time)# 设置编码re.encoding = re.apparent_encoding# 如果请求返回状态码不是200,抛出异常re.raise_for_status()return re.text  # 返回网页内容except Exception as error:print(error)  # 输出错误信息# 定义函数 parser,用于解析HTML内容并提取数据
def parser(html):soup = BeautifulSoup(html, "lxml")  # 使用BeautifulSoup解析HTMLout_list = []  # 初始化存储结果的列表# 遍历所有符合条件的元素for row in soup.select(".quote"):text = row.select_one(".text").get_text(strip=True)  # 提取名言文本author = row.select_one(".author").get_text(strip=True)  # 提取作者名字out_list.append([text, author])  # 将结果添加到列表return out_list  # 返回结果列表# 定义函数 save_csv,用于将数据保存到CSV文件中
def save_csv(item, path):directory = os.path.dirname(path)  # 获取文件目录路径if not os.path.exists(directory):  # 如果目录不存在os.makedirs(directory)  # 创建目录# 以追加模式(a+)打开CSV文件with open(path, 'a+', newline='', encoding='utf-8') as f:csv_write = csv.writer(f)  # 创建CSV写入对象csv_write.writerows(item)  # 写入数据# 主程序
if __name__ == "__main__":# 遍历前10页for i in range(1, 11):url = "http://quotes.toscrape.com/page/{0}/".format(i)  # 构造URLhtml = get_html(url)  # 获取HTML内容out_list = parser(html)  # 解析HTML并提取数据save_csv(out_list, "data/名人名言.csv")  # 保存数据到CSV文件print("名人名言已保存到:data/名人名言.csv")  # 输出提示信息

 代码解释:

从一个名言网站 http://quotes.toscrape.com/ 爬取名言数据,并保存到本地的 CSV 文件中:

  1. 导入必要的库

    • requests 用于发送HTTP请求
    • BeautifulSoup 用于解析HTML
    • csv 用于处理CSV文件
    • os 用于处理文件和目录
  2. 定义 get_html 函数

    • 接受一个URL和超时时间参数,发送GET请求获取网页内容
    • 请求成功则返回网页内容,否则打印错误信息
  3. 定义 parser 函数

    • 接受HTML内容,使用BeautifulSoup解析HTML
    • 从HTML中提取包含名言和作者信息的元素,存储在一个列表中并返回
  4. 定义 save_csv 函数

    • 接受要保存的数据和目标文件路径
    • 检查并创建存储目录(如果不存在)
    • 以追加模式打开CSV文件,将数据写入文件
  5. 主程序执行部分

    • 遍历前10页,构造每个页面的URL
    • 获取每个页面的HTML内容,解析并提取数据
    • 将提取的数据保存到指定的CSV文件中
  6. 输出提示信息

    程序结束后,输出提示信息,告知数据已保存到特定位置

2.数据清洗

import pandas as pd  # 导入用于数据处理的Pandas库# 定义函数 clean_data,用于清洗数据
def clean_data(input_path, output_path):# 读取CSV文件并指定列名为"名言"和"姓名",不使用文件的头部信息作为列名df = pd.read_csv(input_path, names=["名言", "姓名"], header=None, encoding='utf-8')# 删除包含缺失值的行df.dropna(inplace=True)# 删除重复的行df.drop_duplicates(inplace=True)# 添加新列"时间",赋值为固定时间"2023-06"df["时间"] = "2023-06"# 将处理后的数据保存到CSV文件中,不保存索引信息df.to_csv(output_path, index=False, encoding='utf-8')# 主程序执行部分
if __name__ == "__main__":input_file = "data/名人名言.csv"  # 输入文件路径output_file = "data/清洗结果.csv"  # 输出文件路径clean_data(input_file, output_file)  # 调用clean_data函数进行数据清洗print("清洗后的数据已保存到:data/清洗结果.csv")  # 输出提示信息

 代码解释:

对输入的CSV文件进行处理后保存为新的CSV文件。

  1. 导入必要的库

    pandas 用于数据处理
  2. 定义 clean_data 函数

    • 该函数接受输入文件路径和输出文件路径作为参数
    • 使用Pandas读取CSV文件,指定列名为"名言"和"姓名",不使用文件头部信息作为列名
    • 删除包含缺失值的行和重复行
    • 添加新列"时间",所有行的值都设为"2023-06"
    • 将清洗后的数据保存到输出文件中,不保存索引信息
  3. 主程序执行部分

    • 指定输入文件和输出文件的路径
    • 调用 clean_data 函数,对数据进行清洗操作
    • 输出提示信息,告知清洗后的数据已保存到特定位置

相关文章:

  • C# 中的隐式和显式类型转换
  • 华为HCIP Datacom H12-821 卷9
  • django学习入门系列之第三点《CSS基础样式介绍2》
  • select实现超时保护机制
  • 【性能优化】表分桶实践最佳案例
  • odoo17 小变更3 Warning、 “attrs “和 “states “不再用
  • 树和二叉树的定义
  • HBase面试题
  • 端到端的自动驾驶--论坛分析
  • Linux操作系统篇:多线程
  • 【Effective Modern C++】第1章 型别推导
  • 【React篇】父组件渲染时避免重复渲染子组件的3种处理方法
  • [C++][数据结构][跳表]详细讲解
  • SpringCloud微服务框架的原理及应用详解(二)
  • 完胜PSP的神器
  • 2018一半小结一波
  • Create React App 使用
  • Django 博客开发教程 8 - 博客文章详情页
  • ES6语法详解(一)
  • exif信息对照
  • learning koa2.x
  • log4j2输出到kafka
  • Python socket服务器端、客户端传送信息
  • Python语法速览与机器学习开发环境搭建
  • Rancher如何对接Ceph-RBD块存储
  • Travix是如何部署应用程序到Kubernetes上的
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 前端攻城师
  • 前嗅ForeSpider教程:创建模板
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 突破自己的技术思维
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​ssh免密码登录设置及问题总结
  • #### go map 底层结构 ####
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (3)(3.5) 遥测无线电区域条例
  • (二)fiber的基本认识
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)认识微服务
  • (转) ns2/nam与nam实现相关的文件
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)详解PHP处理密码的几种方式
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitignore文件_Git:.gitignore