Python数据分析实验一:Python数据采集与存储

简介: Python数据分析实验一:Python数据采集与存储

一、实验目的与要求

1、目的:

  理解抓取网页数据的一般处理过程;熟悉应用 Chrome 浏览器的工具分析网页的基本操作步骤;掌握使用 Requests 库获取静态网页的基本方法;掌握 Beautiful Soup 提取静态网页信息的主要技术。

  理解网络数据采集的 Robots 协议的基本要求,能合规地进行网络数据采集。

2、要求:

 编写一个网络,爬取某个网站的信息并存储到文件或数据库中。学生既可以使用 Requests/Beautiful Soup 库来实现信息采集,也可以自选其他爬虫技术,对爬取的网站也允许自选,但需要符合相关网站的规定。推荐如下的两个网址,可以选择其中之一采集网页上的信息:


(1)爬取 “中国南海网” 站点上的相关信息。

 图1是中国南海网上特定页面(http://www.thesouthchinasea.org.cn/about.html)的部分截图,请爬取该网页中某一栏目的内容并保存在一个TXT文件中,爬取结果如图2所示。

图1 中国南海网的网页截图  

图2 爬取网页上“概说南海”的文字效果图  

(2)爬取天气网站上的北京的历史天气信息。

 图3是天气网关于北京2019年9月份天气信息的部分截图,请爬取该网页(http://www.tianqihoubao.com/lishi/beijing/month/201909.html)中的天气信息并保存在一个 CSV 文件中,爬取结果如图4所示。

图3 天气网关于北京2019年9月份天气信息的部分截图  

图4 爬取并保存在CSV文件中的信息

二、实验过程

1、观察所爬取网站的Robots协议的相关内容:

https://www.baidu.com/robots.txt

2、网络抓取网页数据的一般处理过程:

(1)确定目标网站:首先,需要明确自己想要获取哪个网站上的数据。通常情况下,我们需要先通过浏览器访问该网站,并查看其源代码,以便更好地了解其网页结构和所需数据所在位置。

(2)分析目标网站:接着,需要对目标网站进行分析。这包括查看该网站的 robots.txt 文件,了解其对的限制;查看其页面结构和 URL 规则,以便编写相应的程序。

(3)编写程序:在确定了目标网站并分析了其结构后,就可以开始编写程序了。这需要使用一些编程语言和相关库来实现。在编写程序时,需要注意多线程处理、异常处理等问题。

(4)发送 HTTP 请求:在编写好程序后,就可以向目标网站发送 HTTP 请求了。这需要使用相应的库或工具来实现。在发送请求时,需要注意设置请求头、代理等参数,以避免被目标网站封禁。

(5)解析 HTML 页面:当爬虫程序成功获取到目标网站返回的响应后,就需要对其进行解析。这需要使用一些 HTML 解析器来实现。在解析页面时,需要注意处理页面中的各种标签、属性等信息,并将所需数据提取出来。

(6)存储数据:在提取出所需数据后,就需要将其存储下来。这可以使用各种数据库或文件系统来实现。在存储数据时,需要考虑数据格式、存储方式等问题。

(7)去重处理:由于同一个网站上可能存在多个相同的页面或数据,因此需要对已经获取过的页面或数据进行去重处理。

三、主要程序清单和运行结果

1、爬取 “中国南海网” 站点上的相关信息

import requests
from bs4 import BeautifulSoup

# 发起请求
url = 'http://www.thesouthchinasea.org.cn/about.html'
response = requests.get(url)

# 解析HTML内容
soup = BeautifulSoup(response.content, 'html.parser')

# 查找包含标题为“概说南海”的元素
section = soup.find('h3', text='概说南海')

if section:
    # 获取概说南海栏目标题和内容
    content = f"{section.get_text(strip=True)}\n\n"
    next_element = section.find_next_sibling()
    while next_element and next_element.name != "h3":
        if next_element.name == "p":  # 只获取段落内容
            paragraph_text = next_element.get_text(strip=True)
            paragraph_text = paragraph_text.replace("[更多]", "")
            content += paragraph_text + "\n"
        next_element = next_element.find_next()
    
    # 将内容存储到文件中
    with open('概说南海.txt', 'w', encoding='utf-8') as file:
        file.write(content)

    print('“概说南海”内容已成功爬取并保存到概说南海.txt文件中。')
else:
    print('未找到“概说南海”栏目的内容。')

 用于从指定的 URL(在这个例子中是http://www.thesouthchinasea.org.cn/about.html)爬取标题为“概说南海”的内容,并将这些内容保存到本地文件“概说南海.txt”中。这个过程涉及到发送 HTTP 请求、解析 HTML 内容、文本处理以及文件操作等多个环节。以下是对这个代码的简要分析:

发送HTTP请求:使用requests.get(url)向指定的URL发起GET请求,获取网页内容。

解析HTML内容:利用BeautifulSoup(response.content, 'html.parser')解析服务器返回的内容。这里,response.content得到的是原始的字节流,而'html.parser'是指定的解析器。

查找特定元素:通过soup.find('h3', text='概说南海')查找页面上文本为“概说南海”的<h3>标签,这是定位需要抓取内容的起点。

提取并处理内容:从找到的<h3>标签开始,遍历其后的同级元素,直到遇到下一个<h3>标签为止(或者没有更多同级元素)。在这个过程中,如果遇到的是<p>标签,则提取其文本内容,并去除其中的 “[更多]” 字符串。

保存到文件:将处理后的文本内容写入名为“概说南海.txt”的文件中,文件编码为UTF-8。

异常处理:如果在页面中没有找到标题为“概说南海”的部分,会打印提示信息。

 此脚本展示了 Python 在网络爬虫方面的应用,尤其是使用requests库进行网络请求和BeautifulSoup库进行 HTML 解析的实践。

2、爬取天气网站上的北京的历史天气信息

import requests
from bs4 import BeautifulSoup

# 目标网页的URL
url = "http://www.tianqihoubao.com/lishi/beijing/month/201909.html"
# 使用requests库获取网页内容
response = requests.get(url)
# 使用BeautifulSoup解析获取到的网页内容
soup = BeautifulSoup(response.text, "html.parser")
# 在解析后的网页中找到包含天气信息的表格,假设它的class为"b"
weather_table = soup.find("table", class_="b")
# 从表格中找到所有的行(tr元素),跳过第一行(标题行)
rows = weather_table.find_all("tr")[1:]

# 打开(或创建)一个名为"北京天气信息201909.csv"的文件用于写入
with open("北京天气信息201909.csv", mode="w", encoding="utf-8") as file:
    # 写入CSV文件头
    file.write("日期,温度,天气情况\n")
    
    # 遍历每一行天气数据
    for row in rows:
        columns = row.find_all("td")  # 在当前行中找到所有的单元格(td元素)
        date = columns[0].text.strip()  # 提取日期数据,并去除两端多余的空白字符
        temperature = ' '.join(columns[2].text.strip().split())  # 提取温度数据,将多余的空白字符替换为单个空格
        weather = ' '.join(columns[1].text.strip().split())  # 提取天气情况数据,同样将多余的空白字符替换为单个空格
        
        # 将提取的数据写入CSV文件的一行中
        # 注意CSV中的数据项通常由逗号分隔,如果数据本身包含逗号,则需要用引号包围该数据项
        file.write(f"{date},{temperature},{weather}\n")

# 数据保存完成后打印提示信息
print("天气信息已保存在 北京天气信息201909.csv 文件中。")

 这段代码是用 Python 编写的一个简单的网络爬虫脚本,旨在从指定的网页中提取北京市2019年9月份的天气信息,并将提取到的数据保存到CSV文件“北京天气信息201909.csv”中。以下是对代码的简要分析:

发送HTTP请求:使用requests.get(url)向指定的URL发起GET请求,获取网页内容。

解析HTML内容:利用BeautifulSoup(response.text, 'html.parser')解析服务器返回的HTML内容。这里,response.text包含了网页的文本内容,而'html.parser'是指定的HTML解析器。

查找特定元素:通过soup.find("table", class_="b")查找页面上class为"b"的表格元素,用于定位包含天气信息的表格。

提取并处理内容:遍历表格中的每一行,提取日期、温度和天气情况数据,并进行适当的清洗(去除空白字符)。

保存到文件:将提取的天气信息按照CSV格式写入到名为“北京天气信息201909.csv”的文件中,每行包含日期、温度和天气情况。

CSV文件格式:CSV文件中的数据项通常由逗号分隔,如果数据本身包含逗号,则需要用引号包围该数据项。

异常处理:代码中没有显式的异常处理逻辑,如果在实际运行中出现网络连接问题或者页面结构变化,可能会导致程序出错。

 请注意,网页的结构和内容经常会发生变化,因此需要定期检查和更新代码以适应目标网站的变化。同时,在实际应用中,也应该尊重网站的robots.txt协议,避免对网站造成不必要的负担。

四、程序运行结果

1、爬取 “中国南海网” 站点上的相关信息

运行结果:

2、爬取天气网站上的北京的历史天气信息

运行结果:

五、实验体会

 通过实践,对网络爬虫如何工作有一个直观的认识,包括如何发送 HTTP 请求、如何解析网页内容、如何提取和处理数据等。这个过程能更好地理解网络协议、网页结构(HTML、CSS、JavaScript)以及服务器响应等概念。

 在 Python 数据采集与存储实验中,你接触并使用多种第三方库,比如 requests 用于发起网络请求,BeautifulSoup 或 lxml 用于解析 HTML 文档,pandas 用于数据处理,sqlite3 或其他数据库模块用于数据存储等。这些库大大简化了数据采集和处理的过程,提高了开发效率。数据采集后的处理和存储是非常重要的一环。学会如何清洗数据、转换数据格式、有效地存储数据。这包括了解不同数据存储方式的特点,如文件存储(CSV、JSON等)、数据库存储(关系型数据库如 MySQL、SQLite ;非关系型数据库如 MongoDB)等。

 在进行网络实验的过程中,更加深切地意识到遵守目标网站的 robots.txt 协议、尊重版权、保护个人隐私等法律法规和伦理道德的重要性。这不仅是合法合规的要求,也是作为一名负责任的开发者应有的职业操守。


目录
相关文章
|
6天前
|
数据采集 数据可视化 数据挖掘
数据挖掘实战:使用Python进行数据分析与可视化
在大数据时代,Python因其强大库支持和易学性成为数据挖掘的首选语言。本文通过一个电商销售数据案例,演示如何使用Python进行数据预处理(如处理缺失值)、分析(如销售额时间趋势)和可视化(如商品类别销售条形图),揭示数据背后的模式。安装`pandas`, `numpy`, `matplotlib`, `seaborn`后,可以按照提供的代码步骤,从读取CSV到数据探索,体验Python在数据分析中的威力。这只是数据科学的入门,更多高级技术等待发掘。【6月更文挑战第14天】
42 11
|
1天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python进行数据分析涉及数据收集
【6月更文挑战第21天】使用Python进行数据分析涉及数据收集(如数据库、文件、API),数据清洗(处理缺失值、异常值和重复项),数据探索(统计摘要、可视化和相关性分析),特征工程(创建新特征和编码),模型构建(选择算法、训练与调整),模型评估(计算指标、可视化效果),结果解释(报告和可视化),以及部署与维护。此过程因项目需求而异,可能需迭代。常用库有`pandas`、`requests`、`BeautifulSoup`、`Matplotlib`等。
5 1
|
4天前
|
数据挖掘 数据库连接 Python
GitHub高赞!Python零基础也能搞定的数据分析与处理
经常会有人让我推荐一些 Python 入门教程。虽然 Python 入内教程到处都有,但是这些教程要么太宽泛(没有讲任何关于数据分析的内容),要么太专业(全是关于科学原理的内容)。然而Excel用户往往处在一个中间位置:他们的确是和数据打交道,但是科学原理对于他们来说可能又太专业了。他们常常有一些现有教程无法满足的特殊需求,举例如下 • 为完成某个任务,我应该用哪个 Python-Excel包? • 我如何将 Power Query 数据库连接迁移到 Python? • Excel中的 AutoFilter和数据透视表在 Python 中对应的是什么?
|
4天前
|
存储 数据挖掘 索引
Python streamlit框架开发数据分析网站并免费部署
使用Python的Streamlit框架,开发了一个在线数据分析工具,替代Excel查看设备温度CSV数据。通过pandas读取数据,matplotlib绘制图表。程序处理CSV,提取所需列,计算最大最小平均值,用户可多选查看特定数据。[GitHub](https://github.com/yigedaigua/MGHB)上有完整代码,应用已部署至Streamlit Cloud。
|
7天前
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘实战:Python在金融数据分析中的应用案例
Python在金融数据分析中扮演关键角色,用于预测市场趋势和风险管理。本文通过案例展示了使用Python库(如pandas、numpy、matplotlib等)进行数据获取、清洗、分析和建立预测模型,例如计算苹果公司(AAPL)股票的简单移动平均线,以展示基本流程。此示例为更复杂的金融建模奠定了基础。【6月更文挑战第13天】
32 3
|
2天前
|
数据采集 数据可视化 数据挖掘
Python数据分析入门指南
Python数据分析涉及环境搭建(推荐Anaconda,含pandas和matplotlib库)。使用`pandas`读取CSV数据,如`data = pd.read_csv(&#39;data.csv&#39;)`。数据清洗包括检查缺失值(`data.isnull().sum()`)和处理异常值。然后进行数据处理,如创建新列、选择特定列及分组。利用`matplotlib`进行数据可视化,绘制直方图和散点图,以`plt.hist()`和`plt.scatter()`展示数据。
|
4天前
|
机器学习/深度学习 人工智能 算法框架/工具
Python赋能AI数据分析
Python赋能AI数据分析
19 0
|
9天前
|
机器学习/深度学习 数据采集 数据挖掘
如何用Python进行数据分析?
【6月更文挑战第13天】如何用Python进行数据分析?
106 66
|
10天前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【6月更文挑战第12天】在数字时代,Python因其强大的数据处理能力和易用性成为数据分析首选工具。结合Pandas(用于高效数据处理)和Matplotlib(用于数据可视化),能助你成为数据分析专家。Python处理数据预处理、分析和可视化,Pandas的DataFrame简化表格数据操作,Matplotlib则提供丰富图表展示数据。掌握这三个库,数据分析之路将更加畅通无阻。
|
10天前
|
JSON 数据挖掘 API
数据分析实战丨基于pygal与requests分析GitHub最受欢迎的Python库
数据分析实战丨基于pygal与requests分析GitHub最受欢迎的Python库
18 2

热门文章

最新文章