导语

前几篇文章介绍了爬取静态网站的主要方法。今天写一个小项目实践一下。本项目可以在终端窗口查询全国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脚本加载。

爬取动态网页的方法有三种:

  1. 逆向回溯法
  2. 渲染动态网页法
  3. 模拟浏览器行为法

本文使用的是第三种方法,实现模拟浏览器行为的工具是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写一个爬取中国天气网的终端版天气预报爬虫相关推荐

  1. python爬取网上租房信息_用python爬取租房网站信息的代码

    自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码: 链家的房租网站 两个导入的包 1.requests 用来过去网页内容 2.BeautifulSoup i ...

  2. python 获取qq群成员信息_用Python编写工具获取QQ群成员的昵称和号码,使用,及,小...

    使用火狐浏览器进行数据的抓取,火狐浏览器对json比较友好 进入QQ群官网: 登录后,点击成员管理: 先随机选择一个群,抓取一下信息,找一下规律 打开浏览器控制台,重新刷新网页: 这是我们想要的一些信 ...

  3. python编写win 本地reader程序_使用Python、win32api和Acrobat Reader 9打印PDF

    我有报告,我要发送到一个系统,要求报告是可读的PDF格式.我尝试了所有的免费库和应用程序,我发现唯一有效的是Adobe的acrobat家族.在 我用python编写了一个快速脚本,它使用win32ap ...

  4. python自动接收钉钉信息_用Python实现阿里钉钉机器人读取数据库内容自动发群通知...

    from datetime importdatetimeimportjsonimporturllib.requestimportpymysql as pmsfrom apscheduler.sched ...

  5. python 获取qq群成员信息_教你用python爬取自己加入的QQ群成员名单,它们竟然是这样的人...

    本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...

  6. python 循环定时器 timer显示数据_【Python】多线程、定时循环爬取优信二手车信息...

    爬虫 爬取优信二手车:循环遍历每页,获取相应的有价值字段信息,这里不详细阐释了. 多线程 Python中,使用concurrent.futures模块下的ThreadPoolExecutor类来实现线 ...

  7. python爬取天气数据_用python爬取历史天气数据的方法示例

    某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进. 准备爬的历史天气 爬之前先分析url.左上有年份.月份的下拉选择框, ...

  8. Python爬取网站用户手机号_利用python爬取慕课网站上面课程

    1.抓取网站情况介绍 抓取网站:http://www.imooc.com/course/list 抓取内容:要抓取的内容是全部的课程名称,课程简介,课程URL ,课程图片URL,课程人数(由于动态渲染 ...

  9. 用python输出所有的玫瑰花数_用Python爬取WordPress官网所有插件

    转自丘壑博客,转载注明出处 前言 只要是用WordPress的人或多或少都会装几个插件,可以用来丰富扩展WordPress的各种功能.围绕WordPress平台的插件和主题已经建立了一个独特的经济生态 ...

最新文章

  1. python类中方法的执行顺序-Python中实例化class的执行顺序示例详解
  2. 如何处理跨平台的自适应三
  3. window 日志清除
  4. mongoose更新数据,如果这条记录不存在,则直接变为新增
  5. *【CodeForces - 214D 】Numbers (dp,组合数学)
  6. VC++ 使用CreateProcess创建新进程
  7. JS----window对象详解
  8. 卷积网络虽动人,胶囊网络更传“神”
  9. 记飞机大战小游戏1.0
  10. 牛客网 牛客练习赛7 A.骰子的游戏
  11. python输出你好_python输出你好
  12. 疫情当下,选择代理加盟互联网广告项目的优势
  13. win7计算机广告更改,Win7电脑如何找到带来弹窗广告的软件【图文教程】
  14. ZLMediaKit视频推流和播放步骤
  15. 揭秘ARM FPU 加速浮点计算
  16. polarion alm 2021
  17. 求解n阶方阵的行列式
  18. 预训练语言模型复现-2 whole word mask
  19. PHP+Mysql如何实现数据库增删改查
  20. PostgreSQL 常用命令 总结 ||数据库导入导出

热门文章

  1. 赠书|零压力入门算法的顶流畅销书《漫画算法》
  2. Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限问题
  3. 我说分布式事务之消息最终一致性事务(一):原理及实现
  4. 死磕Java并发:分析 ArrayBlockingQueue 构造函数加锁问题
  5. 永久代内存java_Java8内存模型—永久代(PermGen)和元空间(Metaspace)
  6. html鼠标点击之后隐藏,html中如何用js设置鼠标两秒不动,隐藏鼠标
  7. pytorch kl散度学习笔记
  8. “文艺复兴” ConvNet卷土重来,压过Transformer FAIR重新设计纯卷积新架构
  9. Win10系统和子系统Ubuntu16.04 安装 ros
  10. python3 通过 pybind11 使用Eigen加速