• 【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.数据采集

    1. import requests # 导入用于发送HTTP请求的库
    2. from bs4 import BeautifulSoup # 导入用于解析HTML的库
    3. import csv # 导入用于处理CSV文件的库
    4. import os # 导入用于进行操作系统相关操作的库
    5. # 定义函数 get_html,用于获取网页内容
    6. def get_html(url, time=10):
    7. try:
    8. # 发送HTTP GET请求
    9. re = requests.get(url, timeout=time)
    10. # 设置编码
    11. re.encoding = re.apparent_encoding
    12. # 如果请求返回状态码不是200,抛出异常
    13. re.raise_for_status()
    14. return re.text # 返回网页内容
    15. except Exception as error:
    16. print(error) # 输出错误信息
    17. # 定义函数 parser,用于解析HTML内容并提取数据
    18. def parser(html):
    19. soup = BeautifulSoup(html, "lxml") # 使用BeautifulSoup解析HTML
    20. out_list = [] # 初始化存储结果的列表
    21. # 遍历所有符合条件的元素
    22. for row in soup.select(".quote"):
    23. text = row.select_one(".text").get_text(strip=True) # 提取名言文本
    24. author = row.select_one(".author").get_text(strip=True) # 提取作者名字
    25. out_list.append([text, author]) # 将结果添加到列表
    26. return out_list # 返回结果列表
    27. # 定义函数 save_csv,用于将数据保存到CSV文件中
    28. def save_csv(item, path):
    29. directory = os.path.dirname(path) # 获取文件目录路径
    30. if not os.path.exists(directory): # 如果目录不存在
    31. os.makedirs(directory) # 创建目录
    32. # 以追加模式(a+)打开CSV文件
    33. with open(path, 'a+', newline='', encoding='utf-8') as f:
    34. csv_write = csv.writer(f) # 创建CSV写入对象
    35. csv_write.writerows(item) # 写入数据
    36. # 主程序
    37. if __name__ == "__main__":
    38. # 遍历前10页
    39. for i in range(1, 11):
    40. url = "http://quotes.toscrape.com/page/{0}/".format(i) # 构造URL
    41. html = get_html(url) # 获取HTML内容
    42. out_list = parser(html) # 解析HTML并提取数据
    43. save_csv(out_list, "data/名人名言.csv") # 保存数据到CSV文件
    44. 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.数据清洗

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

     代码解释:

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

    1. 导入必要的库

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

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

      • 指定输入文件和输出文件的路径
      • 调用 clean_data 函数,对数据进行清洗操作
      • 输出提示信息,告知清洗后的数据已保存到特定位置
  • 相关阅读:
    ruoyi权限设置的坑
    OffiSmart Summit智慧办公及空间管理上海线下峰会精彩亮点抢先看
    全球首个!清华/上海交大等联合构建面向糖尿病诊疗的视觉-大语言模型,登 Nature 子刊
    黄菊华老师,Python毕业设计毕设辅导教程(2):Python开发准备,Window 平台安装 Python
    Linux——centos7.4磁盘空间调整分配
    基因组科学数据的安全管理与应用
    2023-2024 计算机信息安全专业毕设题目推荐
    【CSS3】CSS3 动画 ⑥ ( 动画属性示例 | 精灵图帧动画效果实现 )
    深入理解指针(三)
    Windows设置SonarQube项目扫描
  • 原文地址:https://blog.csdn.net/qq_67822268/article/details/139867628