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

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

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

@TOC


# 前言 # 一、历史天气从哪获取? www.tianqihoubao.com # 二、使用步骤 ## 1.引入库 ```c 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,避免被拒 ```c 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 ```
相关文章
|
2天前
|
存储 负载均衡 监控
关系型数据库搭建高可用存储集群
关系型数据库搭建高可用存储集群
17 4
|
10天前
|
存储 SQL 关系型数据库
存储系统、数据库和对象存储 | 青训营
存储系统、数据库和对象存储 | 青训营
|
11天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
11天前
|
关系型数据库 MySQL API
Python web框架fastapi数据库操作ORM(一)
Python web框架fastapi数据库操作ORM(一)
|
12天前
|
SQL 关系型数据库 MySQL
Python操作mysql数据库
Python操作mysql数据库
|
15天前
|
存储 SQL 关系型数据库
关系型数据库存储优化
关系型数据库存储优化
23 1
|
16天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
26 0
|
16天前
|
SQL 缓存 数据库
在Python Web开发过程中:数据库与缓存,如何使用ORM(例如Django ORM)执行查询并优化查询性能?
在Python Web开发中,使用ORM如Django ORM能简化数据库操作。为了优化查询性能,可以:选择合适索引,避免N+1查询(利用`select_related`和`prefetch_related`),批量读取数据(`iterator()`),使用缓存,分页查询,适时使用原生SQL,优化数据库配置,定期优化数据库并监控性能。这些策略能提升响应速度和用户体验。
18 0
|
21小时前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
|
21小时前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections