使用python获取历史天气,存储到sqllite数据库

简介: 使用python获取历史天气,存储到sqllite数据库

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

一、历史天气从哪获取?

www.tianqihoubao.com

二、使用步骤

1.引入库

import requests, json, re, os, sys, datetime,time
import traceback,random
import tianqiSqlite
from urllib.parse import urlparse
from contextlib import closing
from urllib.request import urlopen
from bs4 import BeautifulSoup

2.代码编写

使用到了代理ip,避免被拒

class Tianqi(object):
    def __init__(self):
        self.headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9',
        'cache-control': 'max-age=0',
        'upgrade-insecure-requests': '1',
            'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
        }
        self.domain = ['www.tianqihoubao.com']
        self.base_url = 'http://tianqihoubao.com'
        self.proxies = {}

    def run(self):
        self.getHtml(self.base_url,None)
        #print(self.html)
        soup_p = BeautifulSoup(self.html,'html.parser')
        provices = soup_p.find('table',cellpadding='1')
        if not provices:
            return False
        provices = provices.select('tr td')
        p_num = 0
        for provice in provices:
            p_num = p_num + 1
            #print(provice)
            p_name = provice.a.get_text()
            print('开始查询:'+ p_name + '天气')
            p_url = self.base_url + '/' + provice.a.get('href')
            #p_title = provice.a.get('title')
            #print(str(p_num) + ':' + p_name + ':' + p_url)
            self.getHtml(p_url,None)
            soup_city = BeautifulSoup(self.html,'html.parser') 
            citys = soup_city.find('table',cellpadding='1')
            if not citys:
                continue
            citys = citys.select('tr td')
            c_num = 0
            for city in citys:
                c_num = c_num + 1 
                if  p_num < 24 or p_num == 24 and c_num < 5:
                    continue
                c_name = city.a.get_text()
                print('开始查询:'+ p_name + '|' + c_name + '天气信息')
                c_url = self.base_url + '/' + city.a.get('href')
                c_url = c_url.replace('top','lishi')
                print(str(p_num) +'>'+p_name +'省: '+str(c_num)+ '>' +c_name+ '市: 地址' +c_url)
                self.getHtml(c_url,None)
                soup_years = BeautifulSoup(self.html,'html.parser') 
                years = soup_years.find('div',id='content')
                months = years.select('ul li a')
                for month in  months:
                    url = month['href']
                    if not url.startswith('/'):
                        url = self.base_url + '/lishi/' + url
                    else:
                        url = self.base_url + url
                    print(url)
                    self.getHtml(url,None)
                    soup_months = BeautifulSoup(self.html,'lxml') 
                    days = soup_months.select('table tr')
                    #print(days)
                    for day in days:
                        tds = day.select('td')
                        if not tds[0].a:
                            continue
                        rq = tds[0].get_text().strip().replace('/', '|').replace(' ', '')
                        tq = tds[1].get_text().strip().replace('/', '|').replace(' ', '')
                        wd = tds[2].get_text().strip().replace('/', '|').replace(' ', '')
                        fx = tds[3].get_text().strip().replace('/', '|').replace(' ', '')
                        #print(p_name +'|'+ c_name )
                        if(self.getOne(p_name,c_name,rq) > 0):
                                print(p_name +c_name + rq + '已存在')
                                continue
                        insertsql = 'insert into history_tianqi (`province`,`city`, `t_time`, `tq`,`wd`,`fx`) values (?,?,?,?,?,?)'
                        data = (p_name,c_name,rq,tq,wd,fx)
                        tianqiSqlite.saveInfo(insertsql,data)
                        #return

相关文章
|
3月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
3月前
|
存储 JSON API
Python与JSON:结构化数据的存储艺术
Python字典与JSON格式结合,为数据持久化提供了便捷方式。通过json模块,可轻松实现数据序列化与反序列化,支持跨平台数据交换。适用于配置管理、API通信等场景,兼具可读性与高效性,是Python开发中不可或缺的数据处理工具。
133 0
|
21天前
|
数据采集 数据可视化 安全
基于python大数据的天气可视化分析预测系统
本研究探讨基于Python的天气预报数据可视化系统,旨在提升天气数据获取、分析与展示的效率与准确性。通过网络爬虫技术快速抓取实时天气数据,并运用数据可视化技术直观呈现天气变化趋势,为公众出行、农业生产及灾害预警提供科学支持,具有重要的现实意义与应用价值。
|
8天前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
88 0
|
5月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
509 77
|
4月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
5月前
|
数据采集 存储 NoSQL
Python爬虫Cookie管理最佳实践:存储、清理与轮换
Python爬虫Cookie管理最佳实践:存储、清理与轮换
|
6月前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
208 12
|
7月前
|
存储 SQL NoSQL
【赵渝强老师】达梦数据库的逻辑存储结构
本文介绍了达梦数据库的存储结构,包括逻辑和物理存储两部分。逻辑存储结构由数据库(Database)、表空间(Tablespaces)、段(Segments)、簇(Cluster)和页(Page)组成。数据库是最大逻辑单元,包含所有表、索引等;表空间由数据文件组成,用于存储对象;段由簇构成,簇包含连续的数据页;页是最小存储单元。文中还提供了查询表空间、段和页大小的SQL语句,并附有视频讲解和示意图。
256 7
|
7月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断

推荐镜像

更多