Python爬取国内油价数据,并存入数据库!进行油价数据分析!

本文介绍了一种使用Python爬虫从指定网站抓取中国各地区油价数据的方法,并将其存储到MySQL数据库中的具体实现过程。文章详细阐述了如何定位数据、解析HTML、提取所需信息以及如何与数据库交互。

目标:

爬取国内油价数据,并存入数据库,存入数据库的表名以 oil+当天日期命名。

分析过程

1.chrome浏览器输入网址,查看网页的源代码
2.观察所需爬取的数据在源代码中的位置,发现所需数据被包围在table内

1以<table width="100%" border="0" cellpadding="4" cellspacing="1" bgcolor="#B6CCE4">开头
2以</table>结尾

如下图

3.搜索<table width="100%" border="0" cellpadding="4" cellspacing="1" bgcolor="#B6CCE4">,发现只有一处匹配,符合爬取条件


4.获取到table内的数据后,再获取table内每个<tr></tr>内的数据
5.通过循环获取<tr></tr>内每个<td></td>内的数据,保存为一个列表
6.最后存入数据库即可

方法说明:

1commom.mysql_common.py:使用python操作mysql数据库的方法封装;
2common.table_name.py:命名数据库表名;
3push_data_to_mysql.py:获取网站数据,存入数据库

全部代码

commom.mysql_common.py

 1# -*- coding: utf-8 -*-
 2from pymysql import *
 3import pymysql
 4
 5class Mysql:
 6    def __init__(self, host, port, user, password, db, charset='utf8'):
 7        self.host = host
 8        self.port = port
 9        self.db = db
10        self.user = user
11        self.password = password
12        self.charset = charset
13
14    def connectsql(self):
15        self.conn = connect(host=self.host,
16                            port=self.port,
17                            user=self.user,
18                            passwd=self.password,
19                            db=self.db,
20                            charset=self.charset)
21        self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
22
23    def closesql(self):
24        self.cursor.close()
25        self.conn.close()
26
27    def execute(self, sql):
28        try:
29            self.connectsql()
30            self.cursor.execute(sql)
31            data = self.cursor.fetchall()
32            print(data)
33            self.conn.commit()
34
35            self.closesql()
36
37        except Exception as e:
38            print(e)

common.table_name.py

 1# -*- coding: utf-8 -*-
 2import time
 3import re
 4
 5# 表名称
 6def table_name():
 7    date_time = time.strftime("%Y-%m-%d", time.localtime())
 8    data = re.split(r'-', date_time)
 9    name = "oil" + data[0] + data[1] + data[2]
10    return name

push_data_to_mysql.py

1get_html_text:获取网站的文本数据
2parse_data:对html数据进行解析,获取到所需数据存入一个列表并返回
3create:mysql创建一个表格,用来存入数据(表格名为 oil+当天年月日)
4insert:将数据插入创建的表格

 1# -*- coding: utf-8 -*-
 2import requests
 3import re
 4from common.mysql_common import Mysql
 5from common.table_name import table_name
 6
 7
 8class PushOilDataToMysql:
 9    def __init__(self):
10        self.html = self.get_html_text()
11        self.oil_data = self.parse_data()
12        self.name = table_name()
13        self.do_mysql = Mysql('localhost', 3306, 'root', 'quanguo123..', 'myoildata')
14
15    @staticmethod
16    def get_html_text():
17        url = 'http://youjia.chemcp.com/'
18        try:
19            r = requests.get(url, timeout=30)
20            r.raise_for_status()
21            r.encoding = r.apparent_encoding
22            return r.text
23        except:
24            return ""
25
26    def parse_data(self):
27        oil_data = []
28        try:
29            # 获取<table开头到</table>结尾的数据
30            # 匹配规则, re.S 是因为“.”的作用是匹配除“\n”以外的任何字符, 而在html中有很多"\n"
31            rule_table = '<table width="100%" border="0" cellpadding="4" cellspacing="1" bgcolor="#B6CCE4">\r\n(.*?)</table>'
32            html_data = re.findall(rule_table, self.html, re.S)
33
34            # 获取<tr>开头到</tr>结尾的数据,所有城市的内容
35            # 匹配规则
36            rule_tr = '<tr>\r\n(.*?)</tr>'
37            citys_data = re.findall(rule_tr, html_data[0], re.S)  # data_list 为匹配的城市数据
38
39            for i in range(1, len(citys_data)):
40                city_data = citys_data[i]
41                # 匹配规则
42                rule_city_detail = '<td bgcolor="#FFFFFF">(.*?)</td>'
43                city_detail_data = re.findall(rule_city_detail, city_data, re.S)
44                area = city_detail_data[0].split('>')[1].split("<")[0]
45                oil89 = eval(city_detail_data[1])
46                oil92 = eval(city_detail_data[2])
47                oil95 = eval(city_detail_data[3])
48                oil98 = eval(city_detail_data[4])
49                oil0 = eval(city_detail_data[5])
50                update_time = city_detail_data[6]
51                oil_data.append((area, oil89, oil92, oil95, oil98, oil0, update_time))
52        except:
53            print("获取油价数据失败")
54        return oil_data
55
56    def create(self):
57        sql_create_table = 'create table `%s`(id int auto_increment,`area` varchar(20),`oil89` varchar(20),`oil92` varchar(20),`oil95` varchar(20),`oil98` varchar(20), `oil0` varchar(20), `update_time` varchar(255), primary key(id))' % self.name
58        self.do_mysql.execute(sql_create_table)
59
60    def insert(self):
61        for i in range(len(self.oil_data)):
62            sql_insert = 'insert into %s(area, oil89, oil92, oil95, oil98, oil0, update_time) value%s' % (self.name, self.oil_data[i])
63            self.do_mysql.execute(sql_insert)
64
65
66if __name__ == '__main__':
67    test = PushOilDataToMysql()
68    test.create()
69    test.insert()

 

内容概要:本文系统研究了含混合式抽水蓄能的梯级水电站在源-网-荷-储协同系统中的日前优化调度问题,并提供了基于Matlab的代码实现。研究聚焦于高比例可再生能源接背景下,如何通过优化调度提升电力系统的灵活性与经济性。建立了综合考虑梯级水电站水力耦合关系、抽水蓄能电站双向调节能力、电网潮流约束、负荷需求响应及新能源出力不确定性的多主体协同优化模型,采用数学规划方法求解,旨在实现系统运行成本最小化或清洁能源消纳最大化。研究强调了多能互补与时空协调的重要性,为现代电力系统的低碳高效运行提供了技术路径与仿真工具。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的科研人员、电气工程及相关专业的研究生,以及从事电网调度、能源规划与综合能源系统设计的工程技术人员。; 使用场景及目标:①用于学习和复现源网荷储协同调度的建模方法与求解流程;②为含大规模水电与储能的区域电网日前调度提供决策支持;③支撑学术研究、学位论文撰写或实际工程项目中的调度方案评估与优化设计。; 阅读建议:建议结合所提供的Matlab代码与相关学术文献,深理解模型构建的物理意义与数学表达,通过调整系统参数、边界条件或扩展模型结构(如引更多不确定性因素)进行仿真验证与二次开发,以深化对综合能源系统优化运行机制的理解。
内容概要:本文针对传统三电平并网逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应慢等问题,以有源中点箝位(ANPC)三电平逆变器为研究对象,提出了一套融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相与电网电压前馈控制的高性能一体化并网控制策略。通过深分析ANPC拓扑结构在开关损耗均衡、输出波形质量与中点电位控制方面的显著优势,奠定了系统高性能运行的硬件基础。在此基础上,DPWMA调制策略有效提升了等效开关频率,显著降低输出谐波含量;正负序分离锁相技术实现了电网不平衡工况下的精确相位同步,有效抑制负序分量干扰;电网电压前馈控制则大幅增强了系统的动态响应能力,有效抑制外部扰动影响。通过多层次、多场景的仿真验证,该复合控制策略在稳态运行、电网不平衡及动态切换等工况下均展现出卓越的电能质量、运行稳定性与强鲁棒性,为大功率新能源并网系统提供了先进的技术解决方案。; 适合人群:从事电力电子、新能源并网、智能电网等相关领域的科研人员、电气工程专业研究生及具备一定Matlab/Simulink仿真基础的工程技术人员。; 使用场景及目标:①应用于大功率新能源并网系统中,提升逆变器在复杂电网环境下的运行性能;②为高电能质量要求的工业变频、电能治理设备提供先进的控制策略参考;③作为电力电子系统仿真教学与科研项目的技术方案范例,深化对多电平逆变器及其先进控制技术的理解。; 阅读建议:建议读者结合文中提到的Matlab/Simulink仿真模型进行实践验证,重点关注DPWMA调制的实现细节、正负序分离算法的设计原理以及前馈-反馈复合控制结构的搭建方法,深理解各模块间的协同工作机制,以全面掌握高性能并网逆变器的设计要点与核心技术。
内容概要:本文针对间歇性光伏出力导致的48V直流母线电压波动问题,开展离网光伏直流微网系统的电压稳定控制与储能系统双向充放电闭环调控研究。通过Simulink搭建包含光伏阵列、Boost升压变换器、负载、双向DC-DC变换器及锂离子电池储能的完整仿真系统,重点研究在光照不稳、负载变化等动态条件下系统的能量管理策略。采用光伏MPPT技术最大化太阳能捕获效率,结合储能系统的双向功率调节能力,实现“削峰填谷”与功率动态平衡。研究构建了分层控制架构,涵盖母线电压外环控制与储能充放电内环控制,确保直流母线电压稳定在额定水平,有效抑制功率供需失衡,提升微网电能质量与运行可靠性。; 适合人群:具备电力电子、新能源系统、自动控制或电气工程等相关专业知识的科研人员、高校研究生,以及从事光伏储能系统、微电网设计与仿真的工程技术人员。; 使用场景及目标:①应用于偏远地区、海岛或独立建筑等无电网接场景下的光伏直流微网系统设计与优化;②为解决光伏发电间歇性引发的电压波动与功率失衡问题提供有效的控制策略与仿真验证方案;③指导研究人员开展储能系统在微网中参与电压支撑与能量调度的建模仿真与实验研究。; 阅读建议:建议结合Simulink仿真环境动手复现模型,重点关注MPPT算法与储能双向DC-DC变换器控制策略的协同工作机制,深理解分层控制结构中各模块的信号传递与动态响应特性,以全面掌握系统在不同工况下的稳定控制机理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值