简单的爬取中国天气网某个城市七天的天气预报数据
首先需要了解需要爬取的数据的网页的结构,其结构如下图所示(只截取了部分):
从图中可以看出每一天的天气数据都被一个<li></li>包含,这七天的数据又都包含在一个<ul></ul>中。
所以我们的目标就是获取ul下每个li中的数据。注意,“今天”的数据中温度只有一个数值,而其后6天的
数据温度都有两个数值,需要单独处理。
代码如下(IDE:pycharm):
from bs4 import BeautifulSoup from bs4 import UnicodeDammit import urllib.request import sqlite3class WeatherDB:def openDB(self):# 使用sqlite3建立的weathers数据库self.con = sqlite3.connect("weathers.db")self.cursor = self.con.cursor()try:self.cursor.execute("create table weathers (wCity varchar(16),wDate varchar(16),wWeather varchar(64),wTemp varchar(32),constraint pk_weather primary key(wCity,wDate))")except:self.cursor.execute("delete from weathers")def closeDB(self):self.con.commit()self.con.close()def insert(self,city,date,weather,temp):try:self.cursor.execute("insert into weathers(wCity,wDate,wWeather,wTemp) values(?,?,?,?)",(city,date,weather,temp))except Exception as err:print(err)def show(self):self.cursor.execute("select * from weathers")rows = self.cursor.fetchall()print("%-16s%-16s%-32s%-16s"%("city","date","weather","temp"))for row in rows:print("%-16s%-16s%-32s%-16s"%(row[0],row[1],row[2],row[3])) class WeatherForecast:def __init__(self):# 构造请求头,模拟浏览器self.headers={"User-Agent":"Mozilla/5.0(Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre)Gecko/2008072421 Minefield/3.0.2pre"}# 要爬取的四个城市的名称及其在中国天气网所对应的代码self.cityCode={"北京":"101010100","上海":"101020100","广州":"101280101","深圳":"101280601"}def forecastCity(self, city):if city not in self.cityCode.keys():print(city+"code cannot be found")return# 要访问的网址url = "http://www.weather.com.cn/weather/"+self.cityCode[city]+".shtml"try:#构造request的参数req = urllib.request.Request(url, headers=self.headers)data = urllib.request.urlopen(req)data = data.read()dammit = UnicodeDammit(data, ["utf-8","gbk"])# data中就是返回来的整个网页data = dammit.unicode_markupsoup = BeautifulSoup(data, features="html.parser")# 借助BeautifulSoup查找class是‘t clearfix'的ul中所有的lilis = soup.select("ul[class='t clearfix'] li")# 用来区分“今天”和其余6天n=0for li in lis:try:# 获取li下h1中的文本值date = li.select('h1')[0].text# 获取标签li下class是“wea”的p标签下的文本值weather = li.select('p[class="wea"]')[0].textif n>0:# 对应其余六天,有2个温度需要提取,获取标签li下class是“tem”的p标签下的span标签的文本值temp = li.select('p[class="tem"] span')[0].text+"/"+li.select('p[class="tem"] i')[0].textelse:# 对应“今天”,有1个温度需要提取,获取标签li下class是“tem”的p标签下的i标签的文本值temp = li.select('p[class="tem"] i')[0].textprint(city,date,weather,temp)n=n+1# 将数据插入数据库self.db.insert(city,date,weather,temp)except Exception as err:print(err)except Exception as err:print(err)def process(self,cities):self.db = WeatherDB()self.db.openDB()for city in cities:self.forecastCity(city)self.db.closeDB() ws = WeatherForecast() ws.process(["北京","上海","广州","深圳"]) print("comploted")
运行上述代码后,可以看到如下结果:
我也不是很懂,大家多多指教。
简单的爬取中国天气网某个城市七天的天气预报数据相关推荐
- python爬取中国天气网中城市及其对应编号
文章目录 一.前言 二.思路 三.程序 四.注意事项 一.前言 为了实现爬取各地城市天气预报及其可视化的需要,爬取中国天气网中城市及其对应编号 . 天气预报可视化文章如下: <python爬虫, ...
- R语言爬取中国天气网单个城市实时天气预报数据
在传统零售行业,雨天天气大概会影响晴天30%-40%的销售业绩,所以从网上获取天气数据来作分析,并根据天气数据作出预测,提前做好预防措施和提醒业务人员,把损失减少到最低就显得十分重要,用R语言的rve ...
- R语言rvest包3步爬取中国天气网国内所有城市(县)7天实时天气预报数据
接上一篇用R语言爬取中国天气网单个城市的7天实时天气预报数据,这篇文章综合一下,使用R语言rvest包3步爬取中国天气网国内所有城市(县)7天实时天气预报数据,这里的步数跨度可能有点长,但思路确实是3 ...
- python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...
- python爬取中国天气网天气图标
python爬取中国天气网天气图标 准备工作 天气预报图例网址:http://www.weather.com.cn/static/html/legend.shtml 安装requests:pip in ...
- python爬取中国天气网中国全部城市的天气链接
近期自己尝试用python写一个qqbot实现天气查询功能,现已基本实现 已经基本完成爬取中国天气网的所有城市的天气情况链接 下附中国天气网所有城市的名称及对应链接 {'朝阳': 'http://ww ...
- Scrapy实例:爬取中国天气网天气数据
1.创建项目 在你存放项目的目录下,按shift+鼠标右键打开命令行,输入命令创建项目: PS F:\ScrapyProject> scrapy startproject weather # w ...
- Java爬取中国天气网实况天气数据
因实验室需求,需要找一个实况天气API. 百度云.阿里云.腾讯云上边我都去找了,很多平台要么没有,要么要收费(免费的可调用次数太少了).而我在高德开放平台上找到了一个,但是不符合要求,被老师pass掉 ...
- 使用Python爬取中国天气网天气数据
使用Python获取中国天气网中"广州"天气数据 注意:原文章写于2016年12月 广州天气页面:http://www.weather.com.cn/weather/1012801 ...
最新文章
- 浅谈云服务器都能用来做什么?
- C#用xpath查找某节点
- python pygame模块按键延迟_pygame模块中键控命令不能实现方块移动,求解
- datagrid后台分页js.js
- 最简单的控制台登录小案例,适合初学者
- Unity 脚本生命周期流程图
- html如何设置三列列宽相等,CSS分割宽度100%到3列
- 2021考研c语言编程题,2021c语言编程例题及答案.docx
- Python ATM实战
- python str方法的用法_Python基础之str常用方法、for循环
- paip.java 以及JavaScript (js) 的关系以及区别
- goflyway安装
- 硬盘格式化怎么操作 硬盘格式化后数据还在吗
- Android禁用系统更新
- 蚂蚁金服宫孙:guava探究系列之优雅校验数据
- 【uniapp】 两种上拉加载方式
- python字符串两个冒号_Python 数组字符串 冒号 用法
- 针对Excel表格文件操作的编程实现
- 用区块链解决电子证据司法存证
- 令人炸毛儿的MySQL隐式转换 - 无形之刃,最为致命
热门文章
- 如何在OpenStack Kolla上部署Tungsten Fabric(附14个常见的配置问题)
- EasyDSS流媒体服务器成功实现5G超高清8k视频RTMP/HLS(m3u8)直播过程中遇到的一些坑(insta360 4k/8k直播)
- mysql链接远程报错10061
- R(rstudio)语言协方差分析
- 古币杂谈:基础知识之 进,退,仰,俯,昂,降
- 谈谈生活中那些与学习相关的事儿
- 居然是一个中文Github网站!该不会是个假的吧?
- cal java中的用法_Java中static用法
- 展技术实力,筑元宇宙安全,零时科技成为首批湾区元宇宙联盟成员!
- C++中的~i是什么意思