使用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

相关文章
|
1月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
131 68
|
21小时前
|
存储 druid 分布式数据库
列式存储数据库与超市的关系?
列式存储数据库是一种高效的数据管理方式,类似于超市将相似商品集中摆放。它将相同类型的数据(如年龄、价格)归类存储,便于快速查询和压缩,广泛应用于市场分析、财务报告和健康数据分析等领域。知名产品包括HBase、ClickHouse、Druid和Apache Cassandra等,适合处理大规模数据和实时分析任务。
16 4
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
80 15
|
24天前
|
存储 数据库
快速搭建南大通用GBase 8s数据库SSC共享存储集群
本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。
|
16天前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
2月前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
2月前
|
机器学习/深度学习 数据采集 传感器
使用Python实现深度学习模型:智能极端天气事件预测
使用Python实现深度学习模型:智能极端天气事件预测
171 3
|
2月前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型:智能天气预测与气候分析
使用Python实现深度学习模型:智能天气预测与气候分析
519 3
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
42 4
|
2月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
42 2
下一篇
DataWorks