python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
导语
前几篇文章介绍了爬取静态网站的主要方法。今天写一个小项目实践一下。本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息。
实现效果
【Python爬虫】写一个爬取中国天气网的终端版天气预报爬虫mp.weixin.qq.com
- 文件获取:相关程序和城市id文件可以在公众号 拇指笔记 后台回复"天气预报"获取。
- 使用方法:在终端窗口运行程序,输入查询的区县名称(如:丰台、静安等)。
终端版天气预报https://www.zhihu.com/video/1232696517426642944
相关模块
- pandas:读取城市ID文件
- prettytable:输出ASC风格的表格
- bs4:解析网页
- selenium:渲染网页以便爬取动态网页
- 和其他几个内置库
实现原理
获取每个城市网页的url
中国天气网将不同城市的天气信息存储在了不同的网页中,这些网页的url遵循如下规律。
"http://www.weather.com.cn/weather1d/"+city_id+".shtml"
因此我们只需要获取各个城市的id就可以实现得到各个城市的url了。感谢万能的百度,我查到了全国3400多个区县的id。
为了方便查询,我将各个城市与其对应的id保存到了一个.xlsx文件中,需要的朋友可以后台回复"天气预报"获取。
只需要将这个xlsx文件转换为字典,就可以实现根据输入城市名获取城市id的功能。代码如下
city_id = pd.read_excel('city_id.xlsx')
dict_c = city_id.set_index('City_CN').T.to_dict('list')
city = input('输入查询地:')
test_id = dict_c[city]
test_id.append("".join(filter(str.isdigit, test_id[0])))
print('城市ID:',test_id[1],sep='')
爬取静态网站上的天气信息
近七日天气信息在一个静态网站上。通过观察,可以确定所有需要的信息都在标签<li class = "sky skyid lv">
下。
通过find_all()
方法获取所有这个标签下的信息。
html_dizhi = "http://www.weather.com.cn/weather/"+test_id[1]+".shtml"
html = urlopen(html_dizhi)
obj = bf(html.read(),'html.parser')
mes_links = obj.find_all("li", {"class": re.compile('sky skyid lvd')})
进一步观察该标签下的信息,发现需要的信息分别存储在h1,p,i
等标签下。
找到对应标签,获取近七天每天的信息。
for mes in mes_links:date.append(mes.h1.get_text())wter.append(mes.p.get_text())wd_g.append(mes.span.get_text())
for i in range(7):wd_d.append(obj.select('.tem i')[i].get_text())wind.append(obj.select('.win i')[i].get_text())
爬取动态网站上的天气信息
在获取当日天气网站时我发现返回的当日天气信息是空标签。找了点资料后发现原来这个网站是一个动态网站,需要等待JS脚本加载。
爬取动态网页的方法有三种:
- 逆向回溯法
- 渲染动态网页法
- 模拟浏览器行为法
本文使用的是第三种方法,实现模拟浏览器行为的工具是Selenium。Selenium 简介:
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持市面上几乎所有的主流浏览器。
选择它的理由当然是因为简单, Selenium可以非常容易的爬取动态网页,并且搜索节点的方法与之前在静态网页中使用的方法一样。运用到爬虫中的思路是:
使用Selenium 渲染网页,解析渲染后的网页源码,或者直接通过Selenium 接口获取页面中的元素。
通过以下代码,我们就获得了某一城市的当日网站的HTML文件。
HTML1='http://www.weather.com.cn/weather1d/101050901.shtml'
driver=webdriver.Firefox()
driver.get(HTML1)
page=BeautifulSoup(driver.page_source,'html5lib')
获取到网页信息后,简单查看就可以找到包含今日天气信息的标签(<div class ='sk'>
)
仍然可以通过爬取静态网页的方法获得其中的信息。
最后
如果觉得本文还可以,还请各位点个赞。
python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫相关推荐
- python爬取网上租房信息_用python爬取租房网站信息的代码
自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码: 链家的房租网站 两个导入的包 1.requests 用来过去网页内容 2.BeautifulSoup i ...
- python 获取qq群成员信息_用Python编写工具获取QQ群成员的昵称和号码,使用,及,小...
使用火狐浏览器进行数据的抓取,火狐浏览器对json比较友好 进入QQ群官网: 登录后,点击成员管理: 先随机选择一个群,抓取一下信息,找一下规律 打开浏览器控制台,重新刷新网页: 这是我们想要的一些信 ...
- python编写win 本地reader程序_使用Python、win32api和Acrobat Reader 9打印PDF
我有报告,我要发送到一个系统,要求报告是可读的PDF格式.我尝试了所有的免费库和应用程序,我发现唯一有效的是Adobe的acrobat家族.在 我用python编写了一个快速脚本,它使用win32ap ...
- python自动接收钉钉信息_用Python实现阿里钉钉机器人读取数据库内容自动发群通知...
from datetime importdatetimeimportjsonimporturllib.requestimportpymysql as pmsfrom apscheduler.sched ...
- python 获取qq群成员信息_教你用python爬取自己加入的QQ群成员名单,它们竟然是这样的人...
本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...
- python 循环定时器 timer显示数据_【Python】多线程、定时循环爬取优信二手车信息...
爬虫 爬取优信二手车:循环遍历每页,获取相应的有价值字段信息,这里不详细阐释了. 多线程 Python中,使用concurrent.futures模块下的ThreadPoolExecutor类来实现线 ...
- python爬取天气数据_用python爬取历史天气数据的方法示例
某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进. 准备爬的历史天气 爬之前先分析url.左上有年份.月份的下拉选择框, ...
- Python爬取网站用户手机号_利用python爬取慕课网站上面课程
1.抓取网站情况介绍 抓取网站:http://www.imooc.com/course/list 抓取内容:要抓取的内容是全部的课程名称,课程简介,课程URL ,课程图片URL,课程人数(由于动态渲染 ...
- 用python输出所有的玫瑰花数_用Python爬取WordPress官网所有插件
转自丘壑博客,转载注明出处 前言 只要是用WordPress的人或多或少都会装几个插件,可以用来丰富扩展WordPress的各种功能.围绕WordPress平台的插件和主题已经建立了一个独特的经济生态 ...
最新文章
- python类中方法的执行顺序-Python中实例化class的执行顺序示例详解
- 如何处理跨平台的自适应三
- window 日志清除
- mongoose更新数据,如果这条记录不存在,则直接变为新增
- *【CodeForces - 214D 】Numbers (dp,组合数学)
- VC++ 使用CreateProcess创建新进程
- JS----window对象详解
- 卷积网络虽动人,胶囊网络更传“神”
- 记飞机大战小游戏1.0
- 牛客网 牛客练习赛7 A.骰子的游戏
- python输出你好_python输出你好
- 疫情当下,选择代理加盟互联网广告项目的优势
- win7计算机广告更改,Win7电脑如何找到带来弹窗广告的软件【图文教程】
- ZLMediaKit视频推流和播放步骤
- 揭秘ARM FPU 加速浮点计算
- polarion alm 2021
- 求解n阶方阵的行列式
- 预训练语言模型复现-2 whole word mask
- PHP+Mysql如何实现数据库增删改查
- PostgreSQL 常用命令 总结 ||数据库导入导出
热门文章
- 赠书|零压力入门算法的顶流畅销书《漫画算法》
- Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限问题
- 我说分布式事务之消息最终一致性事务(一):原理及实现
- 死磕Java并发:分析 ArrayBlockingQueue 构造函数加锁问题
- 永久代内存java_Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- html鼠标点击之后隐藏,html中如何用js设置鼠标两秒不动,隐藏鼠标
- pytorch kl散度学习笔记
- “文艺复兴” ConvNet卷土重来,压过Transformer FAIR重新设计纯卷积新架构
- Win10系统和子系统Ubuntu16.04 安装 ros
- python3 通过 pybind11 使用Eigen加速