当前位置:   article > 正文

天气预报数据爬虫实例_爬取天气数据存到hive

爬取天气数据存到hive

爬取天气预报数据

爬取银川市30天天气预报数据,包含时间、温度、空气质量等信息,将爬取到的信息显示到屏幕上,同时将数据保存到excel表。

功能描述

输入:天气预报网站url链接https://www.tianqi.com/yinchuan/30/
输出:30天天气预报屏幕输出(时间,风向,温度,空气质量)
技术路线:requests-bs4
可行性分析:网页源码如下,分析可从html提取信息
爬取的网页界面如下:
在这里插入图片描述
网页源码如下:
在这里插入图片描述

代码及思路分析

1.导入库,requests库用于访问url连接,BeautifulSoup库用于提取网页信息,pandas库用于将爬取的数据导出到excel表格。

import requests
from bs4 import BeautifulSoup
import bs4
import pandas as pd
  • 1
  • 2
  • 3
  • 4

2.反爬操作,这里添加hearder,让爬虫模拟浏览器访问网页

url='https://www.tianqi.com/yinchuan/30/'
headers={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"}
  • 1
  • 2

若不加hearder则会报如下错误:
在这里插入图片描述
3.通过requests库访问url链接获取天气预报网页内容,新建ulist列表用于存放爬取的数据,r.raise_for_status()判断状态码是否为200,不为200,则产生异常requests.HTTPError,最后将爬取的网页文本保存在demo。

ulist=[]
r=requests.get(url,headers=headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
demo=r.text
  • 1
  • 2
  • 3
  • 4
  • 5

4.使用BeautifulSoup库提取信息并存放在ulist列表中

soup=BeautifulSoup(demo,'html.parser')
for tr in soup.find('ul','weaul').children:
    if isinstance(tr,bs4.element.Tag):
        tds = tr.find_all('div')
        tqs=tr('span')
        time=tds[0].string.split("\r")[0]
        wendu=tqs[0].string+'~'+tqs[1].string
        ulist.append([time,tds[4].string,wendu,tqs[2].string])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5.利用pandas库将列表数据导出到excel表,并将信息显示在屏幕上

dataframe=pd.DataFrame(ulist)
dataframe.to_excel('list1.xls')
tplt="{0:{4}^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}"
print(tplt.format("时间","风向","温度","空气质量",chr(12288)))
for i in range(30):
    u=ulist[i]
    print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))
        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

代码及结果

代码如下:

import requests
from bs4 import BeautifulSoup
import bs4
import pandas as pd
url='https://www.tianqi.com/yinchuan/30/'
headers={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"}
ulist=[]
r=requests.get(url,headers=headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
demo=r.text
soup=BeautifulSoup(demo,'html.parser')
for tr in soup.find('ul','weaul').children:
    if isinstance(tr,bs4.element.Tag):
        tds = tr.find_all('div')
        tqs=tr('span')
        time=tds[0].string.split("\r")[0]
        wendu=tqs[0].string+'~'+tqs[1].string
        ulist.append([time,tds[4].string,wendu,tqs[2].string])
dataframe=pd.DataFrame(ulist)
dataframe.to_excel('list1.xls')
tplt="{0:{4}^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}"
print(tplt.format("时间","风向","温度","空气质量",chr(12288)))
for i in range(30):
    u=ulist[i]
    print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

屏幕显示结果如下:
在这里插入图片描述
导出表格数据如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/373272
推荐阅读
相关标签
  

闽ICP备14008679号