目录
下面有笔者所放的源码下载链接,读者可自行下载:
链接:https://pan.baidu.com/s/1YmTdlnbSJLvLrrx92zz6Qg
提取码:wkk6
scrapy官方提供的网站:Quotes to Scrape
使用requests库,获取1-10页的名人名言页面,获取名人名言和作者两项信息,结果存放到“名人名言.csv”文件中,并将文件保存在data目录下,如果目录不存在,则先创建目录.
读取“名人名言.csv”,数据列名为“名言”和“姓名”,删除数据项为空的数据,删除重复数据,增加“时间”列,数据为“2023-06”,结果存放到“清洗结果.csv”中,保存在data目录。
- 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解析HTML
- out_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) # 构造URL
- html = get_html(url) # 获取HTML内容
- out_list = parser(html) # 解析HTML并提取数据
- save_csv(out_list, "data/名人名言.csv") # 保存数据到CSV文件
-
- print("名人名言已保存到:data/名人名言.csv") # 输出提示信息
代码解释:
从一个名言网站 http://quotes.toscrape.com/ 爬取名言数据,并保存到本地的 CSV 文件中:
导入必要的库:
requests 用于发送HTTP请求BeautifulSoup 用于解析HTMLcsv 用于处理CSV文件os 用于处理文件和目录定义 get_html 函数:
定义 parser 函数:
定义 save_csv 函数:
主程序执行部分:
输出提示信息:
程序结束后,输出提示信息,告知数据已保存到特定位置- 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文件。
导入必要的库:
pandas 用于数据处理定义 clean_data 函数:
主程序执行部分:
clean_data 函数,对数据进行清洗操作