问题:获取苏州8-15天的天气信息,包含: 日期、天气、温度、风力等信息,然后将数据存入一个文档中,网址为:http://www.weather.com.cn/weather/101190401.shtml。
1. 问题分析
首先我们进入天气网,然后开始对页面进行分析。右键页面检查网页源代码或者F12或者Ctrl+Shift+F等进入当前页面,有html学习基础的可以直接在网页源码中找相应的信息标签,当然也可以直接点击左上方的按钮,开启快速查找,开启后可以点击网页中的信息及可迅速定位到该信息的网页源码。
解析方式:我们通过BeautifulSoup中的方法来锁定信息,先找到对应的id和class,然后再找到‘ul’中‘class’为‘t clearfix’,然后找到所有的‘li’标签。
1 | weathers = soup.find( id = "7d" , class_ = "c7d" ).find( 'ul' , class_ = "t clearfix" ).find_all( 'li' ) |
1 2 3 4 5 | res = requests.get( 'http://www.weather.com.cn/weather15d/101190401.shtml' ) res.encoding = 'utf-8' html = res.text soup = BeautifulSoup(html, 'html.parser' ) weathers = soup.find( id = "7d" , class_ = "c7d" ).find( 'ul' , class_ = "t clearfix" ).find_all( 'li' ) |
当前的weathers锁定了weather区域,我们再通过BeatifulSoup来进行数据的解析,我们把weathers中的日期、天气、温度、风力的信息通过class名字获取到。
1 2 3 4 5 6 7 8 9 10 | for weather in weathers: weather_date = weather.find( 'span' , class_ = "time" ) weather_wea = weather.find( 'span' , class_ = "wea" ) weather_tem = weather.find( 'span' , class_ = "tem" ) weather_wind = weather.find( 'span' , class_ = "wind" ) weather_wind1 = weather.find( 'span' , class_ = "wind1" ) result = '日期:' + weather_date.text, '天气:' + weather_wea.text, '温度:' + weather_tem.text, '风力:' + weather_wind.text + weather_wind1.text print (result) print (result, file = mylog) |
采用遍历的方式每次获取一个标签,最后输出相应的内容,然后存放在文档中。
2. 完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import requests from bs4 import BeautifulSoup qy = open ( 'C:/Users/轻烟/Desktop/db.txt' ,mode = 'a' ,encoding = 'utf-8' ) res = requests.get( 'http://www.weather.com.cn/weather15d/101190401.shtml' ) res.encoding = 'utf-8' html = res.text soup = BeautifulSoup(html, 'html.parser' ) #解析文档 weathers = soup.find( id = "15d" , class_ = "c15d" ).find( 'ul' , class_ = "t clearfix" ).find_all( 'li' ) for weather in weathers: weather_date = weather.find( 'span' , class_ = "time" ) weather_wea = weather.find( 'span' , class_ = "wea" ) weather_tem = weather.find( 'span' , class_ = "tem" ) weather_wind = weather.find( 'span' , class_ = "wind" ) weather_wind1 = weather.find( 'span' , class_ = "wind1" ) result = '日期:' + weather_date.text, '天气:' + weather_wea.text, '温度:' + weather_tem.text, '风力:' + weather_wind.text + weather_wind1.text print (result) #输出 print (result, file = qy) #保存到文档中 |
3. 爬取结果
控制台:
1 2 3 4 5 6 7 8 | ( '日期:周五(28日)' , '天气:雨' , '温度:12℃/6℃' , '风力:东风转北风3-4级' ) ( '日期:周六(29日)' , '天气:阴' , '温度:11℃/3℃' , '风力:北风转东风<3级' ) ( '日期:周日(1日)' , '天气:阴转多云' , '温度:12℃/5℃' , '风力:东南风转东北风<3级' ) ( '日期:周一(2日)' , '天气:雨' , '温度:12℃/5℃' , '风力:北风<3级' ) ( '日期:周二(3日)' , '天气:晴转多云' , '温度:9℃/3℃' , '风力:北风3-4级转<3级' ) ( '日期:周三(4日)' , '天气:晴' , '温度:9℃/1℃' , '风力:北风<3级' ) ( '日期:周四(5日)' , '天气:晴转多云' , '温度:8℃/2℃' , '风力:东北风转东南风<3级' ) ( '日期:周五(6日)' , '天气:晴' , '温度:11℃/5℃' , '风力:东风<3级' ) |
文档中:
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程