-
2021-12-01 18:31:24
前段时间面试了伊利集团,领导现场出题,让我爬取天气网站上的城市降水量,这里我做了一个简单的爬取呼和浩特市一个月内的天气情况的爬虫小程序,最终结果是保存在一个txt文件夹中,感兴趣的各位可以参考一下。(当然程序我也是参考了别人的,嘿嘿嘿!!)
爬虫的整体原理可以参考我的上一篇博客,是我从b站上看视频做的一点总结,想快速上手爬虫的小伙伴快来!!程序底层框架
(一)导入所需库
这里我们导入需要的第三方库和内库- requests
这个是第三方库,需要自行安装,pip一下,它主要用来发送请求 - re
这是一个内库,即标准库,是python自带的,无需手动安装,主要作用就是正则表达式提取html文档时用到 - BeautifulSoup
相当于一个解析器,也是在html文档解析时用到,作用和XPath类似 - pandas
第三方库,非常强大,常用于做数据分析,可以提供一些处理数据的函数和方法,创建DataFrame时用
(二)获取天气网页的url
我们先来说一下什么是网络资源,其实网络资源就是我们看到的任何一张图片,文字信息、视频、音频等等都可以称作一个网络资源。我们在浏览器搜索就需要它对应的网址,每一种网络资源都可以用一个url来命名。现在做的就是需要爬取天气信息,所以首先要有天气网页的URL,headers这是一个请求头,可设可不设,请求头是怕服务器有反爬机制,拒绝爬虫的发送的请求,设置请求头就是为让服务器认为是浏览器在访问,发现不了是爬虫。
(三)获取网页源代码——html文档
我们将网页源代码下载下来,进行源码提取,在此之前还需要对其进行一个文本格式的转换(四)正则解析提取所需内容
我们将网页源码打开之后,找到我们要爬取的内容所在节点,然后用正则提取即可。
我们要记住正则提取的一个常用框架,re.findall(r’从哪里开始 (.*?) 到哪里结束’,html,re.s)[0] .代表匹配任意字符,*代表匹配多个,?代表非他能匹配,()代表反向捕获(五)将结果导入到txt文件中
具体代码
import requests import re import time from bs4 import BeautifulSoup import pandas as pd url='http://lishi.tianqi.com/huhehaote/202110.html' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 'Cookie':'lianjia_uuid=9d3277d3-58e4-440e-bade-5069cb5203a4; UM_distinctid=16ba37f7160390-05f17711c11c3e-454c0b2b-100200-16ba37f716618b; _smt_uid=5d176c66.5119839a; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22%24device_id%22%3A%2216ba37f7a942a6-0671dfdde0398a-454c0b2b-1049088-16ba37f7a95409%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; _ga=GA1.2.1772719071.1561816174; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1561822858; _jzqa=1.2532744094467475000.1561816167.1561822858.1561870561.3; CNZZDATA1253477573=987273979-1561811144-%7C1561865554; CNZZDATA1254525948=879163647-1561815364-%7C1561869382; CNZZDATA1255633284=1986996647-1561812900-%7C1561866923; CNZZDATA1255604082=891570058-1561813905-%7C1561866148; _qzja=1.1577983579.1561816168942.1561822857520.1561870561449.1561870561449.1561870847908.0.0.0.7.3; select_city=110000; lianjia_ssid=4e1fa281-1ebf-e1c1-ac56-32b3ec83f7ca; srcid=eyJ0Ijoie1wiZGF0YVwiOlwiMzQ2MDU5ZTQ0OWY4N2RiOTE4NjQ5YmQ0ZGRlMDAyZmFhODZmNjI1ZDQyNWU0OGQ3MjE3Yzk5NzFiYTY4ODM4ZThiZDNhZjliNGU4ODM4M2M3ODZhNDNiNjM1NzMzNjQ4ODY3MWVhMWFmNzFjMDVmMDY4NWMyMTM3MjIxYjBmYzhkYWE1MzIyNzFlOGMyOWFiYmQwZjBjYjcyNmIwOWEwYTNlMTY2MDI1NjkyOTBkNjQ1ZDkwNGM5ZDhkYTIyODU0ZmQzZjhjODhlNGQ1NGRkZTA0ZTBlZDFiNmIxOTE2YmU1NTIxNzhhMGQ3Yzk0ZjQ4NDBlZWI0YjlhYzFiYmJlZjJlNDQ5MDdlNzcxMzAwMmM1ODBlZDJkNmIwZmY0NDAwYmQxNjNjZDlhNmJkNDk3NGMzOTQxNTdkYjZlMjJkYjAxYjIzNjdmYzhiNzMxZDA1MGJlNjBmNzQxMTZjNDIzNFwiLFwia2V5X2lkXCI6XCIxXCIsXCJzaWduXCI6XCIzMGJlNDJiN1wifSIsInIiOiJodHRwczovL2JqLmxpYW5qaWEuY29tL3p1ZmFuZy9yY28zMS8iLCJvcyI6IndlYiIsInYiOiIwLjEifQ==' } def get_page(url,headers): html=requests.get(url,headers=headers) # HTTP状态码(baiHTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码,200表示请求成功:表示网络请求成功的意思 if html.status_code==200: html.encoding=html.apparent_encoding # apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encoding比encoding更加准确 return html.text else: return None # 因为要爬取该城市11月份每天的'星期':week_box,'最高温度':max_temp,'最低温度':min_temp,'天气':weh,'风向':wind,创建对应的空列表去存储信息 date_box=[] max_temp=[] min_temp=[] weh=[] wind=[] week_box=[] html=get_page(url,headers) # 解析数据,这里用到BeautifulSoup,我们也可以用XPath里的lxml,使用BeautifulSoup前需要先构建BeautifulSoup实例(需要补充一下) bs=BeautifulSoup(html,'html.parser') # find_all方法返回所有匹配到的结果 data=bs.find_all(class_='thrui') # re.compile()生成的是正则对象,单独使用没有任何意义,需要和findall(), search(), match()搭配使用。re.compile()是用来优化正则的,它将正则表达式转化为对象,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式,多次调用一个正则表达式就重复利用这个正则对象,可以实现更有效率的匹配 date=re.compile('class="th200">(.*?)</') # 利用正则唯一把日期提取出来 tem=re.compile('class="th140">(.*?)</') # 把最高、底气温、天气、风向提取出来 # compile和finall结合可以输出一个列表,tem就是一个列表 # findall可以实现从字符串文本中提取日期,正好日期是字符串格式 time=re.findall(date,str(data)) # 用一个for循环把这个月的对应日期是周几列出来,并把值填进之前建立的空列表中 for item in time: week=item[10:] # 在week_box列表末尾追加新对象,即把值填进之前建立的空列表中 week_box.append(week) date_box.append(item[:10]) temp=re.findall(tem, str(data)) #返回string中所有与pattern相匹配的全部字串,返回形式为数组 # 用一个for循环,将10月份每天对应的数据追加填进空列表中,数组下表从0开始,首先i取0 for i in range(31): max_temp.append(temp[i*4+0]) # temp是一个数组,当i取0时,temp取0,temp[0]就是最高气温 min_temp.append(temp[i*4+1]) weh.append(temp[i*4+2]) wind.append(temp[i*4+3]) # 创建DataFrame,对应的语法就是 列名:行索引 datas=pd.DataFrame({'日期':date_box,'星期':week_box,'最高温度':max_temp,'最低温度':min_temp,'天气':weh,'风向':wind}) print(datas) # 将其导入txt文件中 datas.columns=['日期','星期','最高温度','最低温度','天气','风向'] datas.to_csv('tianqi.txt')
运行结果
将运行结果保存在tianqi.txt这个文件夹中,如果路径没有会自行创建
更多相关内容 - requests
-
基于Android的天气APP
2021-09-26 19:36:55项目主要是12月23日开始建立,春节半个多月回家了,就没有写了。三月初完成了整个项目。耗时近两个月。平时在公司也就做点测试的任务,开发的任务还得等到毕业后才有TAT不知道毕业后会不会被留下,所以也是练练手。... -
Python爬虫天气预报实例详解(小白入门)
2021-01-20 04:54:37我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有部分页面刷新了,就是天气数据的那块,而URL没有变化。 这是因为网页前端使用了JS异步加载的技术,更新时不用加载整个页面,从而提升... -
专家预计2021春节天气(2021春节天气预测气温会怎样)
2021-04-22 16:25:58很多人都说2021年的春节会很冷,很多人过年的衣服还没有购买,那么2021春节天气预测气温会怎样呢?小编为大家介绍专家预计2021春节天气,看看今年的春节会不会很冷。1.目前的天气自去年12月到现在,我国气温一致偏低...很多人都说2021年的春节会很冷,很多人过年的衣服还没有购买,那么2021春节天气预测气温会怎样呢?小编为大家介绍专家预计2021春节天气,看看今年的春节会不会很冷。
1.目前的天气
自去年12月到现在,我国气温一致偏低,是与冷空气活动造成的降温密切关联,虽然偏冷,但从整个季度来看,不是极端冷。在这个节骨眼,就有了疯传“60年来最冷春节”balabala,然后很多小伙伴就开始关心今年春节冷不冷?
目前来看,今年春节整体正常略偏冷的可能性较大,(请勿忽略后面这句话→)但气温阶段性波动较大,期间有降温及回暖过程。
2.预计2021春节天气
根据日历可以得知,今年春节假期正好处于六九、七九这个时期,从数九歌来看,这个时候柳树开始发芽,冰冻的河流也开始融冰了,冰都开始融化了,说明温度已经开始上升,一天中比较明的时候气温已经在0度以上,不过冰雪融化也会吸收热量,气温依然比较低,但与现在的气温来比还是要温暖很多的。
从节气看,今年春节处于立春时节,快要到雨水了,也就是说已经进入春节,万物也会迎来复苏了,北方地区或许还会有点冷,但是南方地区像广西、广东等地将会比较温暖了。
3.专家分析
一般来说,2021年春节的天气可能比较冷。今年冬天来得比较早,春节也比较晚,所以天气还是比较冷的。
由于全球拉尼娜效应,世界将迎来一个寒冷的冬天。夏天越热,冬天越冷。从今年夏天的炎热情况来看,冬天应该很冷。今年6月,气象学家表示,超强厄尔尼诺现象已经结束。拉尼娜效应可能会给2021年一个寒冷的冬天。在厄尔尼诺现象之后的一到两年内,拉尼娜现象发生的概率很高。如果拉尼娜现象出现,2020-2021年中国将迎来一个寒冷的冬天。
今冬,受拉尼娜影响,我国整体寒冷形势将出现,但寒潮并非全国性,南北差异较大。相比之下,我国北方地区的寒冷程度更为明显,持续升温的地区将出现低温形势。
4.俗语分析
“冬至在月头,寒冷到年底”
这句俗语完整应该这样讲;“冬至在月头,寒冷到年底,冬至在月尾,寒冷在正月,冬至在月中,无雪也无霜。”
每年冬至是在公历12月份,而农历大体是在十一月份,离正月还有1到2个月。当冬至在农历十一月份的月初时,意味三九、四九是冬至过后的第27天到第36天,恰好就是在春节前夕,所以说冬至在月头,寒冷到年底。
5.总结
2021春节天气总得分析下来,小编觉得天气会比较寒冷,大家买过年的新衣服最好还是选择羽绒服棉服这种比较厚实的衣服。
-
40行Python代码实现天气预报和每日鸡汤推送功能
2020-09-17 20:11:17主要介绍了通过40行Python代码实现天气预报和每日鸡汤推送功能,代码简单易懂,非常不错具有一定的参考借鉴价值 ,需要的朋友可以参考下 -
安卓天气日历时间选择倒计时相关-不错的日历视图可以上下滑动切换月份可以点击某一天进入查看该天的事件按...
2019-07-29 17:18:14不错的日历视图,可以上下滑动切换月份,可以点击某一天,进入查看该天的事件(按小时分)。可以添加事件.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
安卓天气日历时间选择倒计时相关-仿365日历左右滑动切换月份选择一天上下滑动收缩.zip
2019-07-29 17:18:04仿365日历,左右滑动切换月份,选择一天,上下滑动收缩.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
用python爬取历史天气数据的方法示例
2021-01-20 04:09:46某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进。 准备爬的历史天气 爬之前先分析url。左上有年份、月份的下拉选择框,按F12,进去看看... -
Android天气APP
2017-04-08 10:50:46项目主要是12月23日开始建立,春节半个多月回家了,就没有写了。三月初完成了整个项目。耗时近两个月。平时在公司也就做点测试的任务,开发的任务还得等到毕业后才有TAT不知道毕业后会不会被留下,所以也是练练手。... -
本人的毕业设计,天气app~
2019-05-19 17:09:53项目主要是12月23日开始建立,春节半个多月回家了,就没有写了。三月初完成了整个项目。耗时近两个月。平时在公司也就做点测试的任务,开发的任务还得等到毕业后才有TAT不知道毕业后会不会被留下,所以也是练练手。... -
在天气周期下用Fuzzy决策制作六月份暴雨预报 (1983年)
2021-05-14 17:07:33这一工作是在江苏省气象科学研究所“天气周期”研究成果的基础上进行的。江浦县的暴雨主要发生在“粤台副高天气周期”内,本文利用Fuzzy决策制作该周期六月的暴雨预报工具。统计各因子隶属度对应各降水量级的频率,... -
C# WebService获取天气信息
2021-10-28 15:18:45WebService1. WebService和MES系统2. 天气预报示例3. 代码下载 1. WebService和MES系统 现在很多工厂的数据上传采用MES上传模式,由...下面就用一个天气预报的例子来说明一下。 2. 天气预报示例 http://www.webxWebService
1. WebService和MES系统
- 现在很多工厂的数据上传采用MES上传模式,由客户端软件将数据文件生成到工控机的固定位置,服务器自动抓取。
- 而下载数据又可以采用WebService,模式和天气预报类似。服务器就像国家天文台一样,把作业信息和调用方法发布到Web端,所有的客户端都可以直接使用Web端上面的方法获取信息。
- 下面就用一个天气预报的例子来说明一下。
2. 天气预报示例
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
- 首先要添加Web引用,要不然可是用不了的。
选择高级
选择添加Web引用
将URL网址填进去,点右面的按钮,然后可以修改一下引用名。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WebServiceTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var w = new WebWeather.WeatherWebService(); string[] str = w.getSupportCity(""); string tmp = ""; for (int i = 0; i < str.Length; i++) { tmp += str[i]; } MessageBox.Show(tmp); } } }
3. 代码下载
-
Hive创建数据库以及数据表的相关操作(以天气为例,去进行统计)
2021-02-20 16:44:07总共有15X365条数据,分别是id号,城市,温度,天气,空气质量指数。(是使用shell写出来的日志文件,我前面的博文有介绍) 二、Hive的一些操作 1.启动Hive 2.创建数据库 3.使用这个库 4.创建数
前言
下面内容详细的介绍了Hive数据仓库的一些使用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、实验数据
总共有15X365条数据,分别是id号,城市,温度,天气,空气质量指数。(是使用shell写出来的日志文件,我前面的博文有介绍)
二、Hive的一些操作
1.启动Hive
2.创建数据库
3.使用这个库
4.创建数据表tem
创建数据表tem用来存储上面得到的天气数据
5.创建表tab1
对空气质量指数升序排列
查看表tab1
6.创建表ta1
查看
7.创建表tab3
(城市中天气为晴的数量最大top10)
查看
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,供大家参考。 -
2021年10月通胀点评:极端天气和燃料短缺推升通胀,CPI升PPI降将持续至春节.pdf
2022-02-22 03:21:542021年10月通胀点评:极端天气和燃料短缺推升通胀,CPI升PPI降将持续至春节.pdf -
历史天气查询2345,怎样查以前的预报天气
2021-06-13 14:42:05历史天气查询2345,怎样查以前的预报天气以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!...3、然后就可以看到自己省会城市的最近一段天气情况。... -
python爬取墨迹天气的8月份的温度情况并发送到邮箱
2018-08-23 18:23:18目标:获取墨迹天气的整个8月份的温度情况,并以txt格式的文件发送到邮箱 环境:pyhton3.6 pycharm软件 163邮箱(163邮箱要打开授权码,才能发送成功) 思路:1.获取墨迹天气8月份的温度网页源码 2.使用... -
Android开源天气应用——小马天气
2021-05-28 02:48:16第一次开始这个项目是2014年4月份,我还在大二的时候,当时有一个程序设计实践课,想着简单点就选了天气预报这个题目,时隔两年又重新拾起,给它脱胎换骨,就是想拿他作为一个学习新知识的实战项目,期间也做过改动... -
2月14日涠洲岛开船时间表/日出日落/天气预报
2021-04-28 05:35:41一、2月14日(年初三)北海涠洲岛开船时间表/日出日落/天气预报北海—涠洲【09:00北游16,10:00北游15,10:30北游26,12:30北游16,14:00北游25,15:20北游26】涠洲—北海【10:45北游16,14:30北游16,16:20北游25... -
PersistentTimeAndWeather:重新启动服务器的持续时间和天气
2021-04-12 23:51:25您现在应该有一个ptws表。 对于32位:将PTWS.ini的内容复制PTWS.ini的@ExileServer\extDB\sql_custom_v2\exile.ini文件中。 对于64位:将PTWS_x64.ini的内容复制PTWS_x64.ini的@extdb3\sql_custom\exile.ini文件... -
新乡地区2011-2021近十年11月份天气数据分析:
2021-12-24 08:59:43首先此部分采用R语言自带plot包及ggplot2包力求达到数据可视化效果,并对近十年新乡天气最高气温和最低气温进行可视化处理并加以回归分析,进一步进行未来10年的新乡11月天气最高气温最低气温进行预测可视化。 -
power BI 天气数据爬取
2021-09-08 17:42:42本篇案例主要介绍如何通过power BI 构建爬虫抓取历史天气数据,然后制作一个简单的可视化呈现效果。 数据爬取 如何从power bi 获取网页的数据 首先,打开需要爬起天气数据的网站,点击历史天气,之后可以看到全国... -
Python爬虫实例:爬取中国天气网上当地一周的气温
2021-09-25 16:00:56爬虫实例:爬取中国天气网上当地一周的气温 首先在程序开始处添加: #coding:UTF-8 这样就能告诉解释器该py程序是utf-8编码的,源程序中可以有中文 第一步:导入要引用的包 import requests #用来爬取网页HTML源... -
Unity插件之天气系统UniStorm
2022-06-18 12:20:31这里我用的是网上下载的3.0.1版本,新版本没有买(大约360块大洋),大家要是商用的话还是推荐买一个官方正版,这里为了学习就使用3.0.1的版本了URP Supported(URP的支持)什么是URPAAA Volumetric Clouds(AAA体积... -
Mapreduce统计月份天气气温
2019-10-11 18:14:03话不多说 先附上 源代码: import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path;... -
Python爬取天气预报数据,并存入到本地EXCEL中
2021-01-14 10:58:26近期忙里偷闲,搞了几天python爬虫,基本可以实现常规网络数据的爬取,比如糗事百科、豆瓣影评、NBA数据、股票数据、天气预报等的爬取,整体过程其实比较简单,有一些HTML+CSS+DOM树等知识就很easy,我就以天气预报... -
微信天气预报跟一段话
2020-12-29 00:05:02跟女孩表白的一段话1、从见你的第一眼开始,我就发现终于找到我的另一半了。我要给你一生的幸福,我坚信一生不动摇!2、天越来越冷,风越来越大,手越来越冰!但这一切都阻止不了我有一颗火热的心!一颗爱你的心!... -
Python 爬取历史天气数据
2020-12-03 07:08:25Python 爬取历史天气数据作者:梅昊铭1. 导读之前Mo给大家分享过杭州历年天气情况的数据集,相信有不少小伙伴好奇这些数据是怎么获取。今天Mo就来教大家如何使用Python来进行历史天气数据的爬取。本文的内容只要求... -
使用python爬取天气信息(包括历史天气数据)
2021-05-15 22:19:02文章目录使用Python爬虫获取城市天气信息(包括历史天气数据)一、准备工作二、完整代码 一、准备工作 python环境3.6.7,需要用到的库主要有re,BeautifulSoup,requests以及pandas(用于保存数据) 目标网站为四川省... -
关于python的中国历年城市天气信息爬取
2021-01-12 08:33:55主题式网络爬虫爬取的内容与数据特征分析爬取中国天气网各个城市每年各个月份的天气数据,包括最高城市名,最低气温,天气状况等。3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)实现思路:通过正则表达式...