使用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月前
|
数据采集 存储 数据处理
Python爬虫-数据处理与存储(一)
Python爬虫-数据处理与存储(一)
|
19天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
116 68
|
20天前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
1月前
|
存储 缓存 Shell
你知道 Python 其实自带了小型数据库吗
你知道 Python 其实自带了小型数据库吗
19 2
你知道 Python 其实自带了小型数据库吗
|
23天前
|
机器学习/深度学习 数据采集 传感器
使用Python实现深度学习模型:智能极端天气事件预测
使用Python实现深度学习模型:智能极端天气事件预测
74 3
|
28天前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型:智能天气预测与气候分析
使用Python实现深度学习模型:智能天气预测与气候分析
303 3
|
30天前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
29天前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
25 2
|
1月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接22.bijius.com
自动化数据预处理:使用Python库(如Pandas)自动清洗、转换和准备数据,为机器学习模型提供高质量输入。 实时数据处理:集成Apache Kafka或Amazon Kinesis等流处理系统,实现实时数据更新和分析。
|
1月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介