??????大家好呀,你們的作業(yè)俠又轟轟轟的出現(xiàn)了,這次給大家?guī)淼氖莗ython爬蟲,實現(xiàn)的是爬取某城市的天氣信息并使用matplotlib進行圖形化分析?????? |
要源碼可私聊我。
大家的關(guān)注就是我作業(yè)俠源源不斷的動力,大家喜歡的話,期待三連呀??????
往期源碼回顧:
【Java】實現(xiàn)繪圖板(完整版)
【C++】圖書管理系統(tǒng)(完整板)
【Java】實現(xiàn)計算器(完整版)
有需要的小伙伴自取哦!
進入今天的正題:
1.實現(xiàn)需求:
從網(wǎng)上(隨便一個網(wǎng)址,我爬的網(wǎng)址會在評論區(qū)告訴大家,dddd)獲取某一年的歷史天氣信息,包括每天最高氣溫、最低氣溫、天氣狀況、風向等,完成以下功能: (1)將獲取的數(shù)據(jù)信息存儲到csv格式的文件中,文件命名為”城市名稱.csv”,其中每行數(shù)據(jù)格式為“日期,最高溫,最低溫,天氣,風向”; (2)在數(shù)據(jù)中增加“平均溫度”一列,其中:平均溫度=(最高溫+最低溫)/2,在同一張圖中繪制兩個城市一年平均氣溫走勢折線圖; (3)統(tǒng)計兩個城市各類天氣的天數(shù),并繪制條形圖進行對比,假設適合旅游的城市指數(shù)由多云天氣占比0.3,晴天占比0.4,陰天數(shù)占比0.3,試比較兩個城市中哪個城市更適合旅游; (4)統(tǒng)計這兩個城市每個月的平均氣溫,繪制折線圖,并通過折線圖分析該城市的哪個月最適合旅游; (5)統(tǒng)計出這兩個城市一年中,平均氣溫在18~25度,風力小于5級的天數(shù),并假設該類天氣數(shù)越多,城市就越適宜居住,判斷哪個城市更適合居?。? |
爬蟲代碼:
import random
import time
from spider.data_storage import DataStorage
from spider.html_downloader import HtmlDownloader
from spider.html_parser import HtmlParser
class SpiderMain:
def __init__(self):
self.html_downloader=HtmlDownloader()
self.html_parser=HtmlParser()
self.data_storage=DataStorage()
def start(self):
"""
爬蟲啟動方法
將獲取的url使用下載器進行下載
將html進行解析
數(shù)據(jù)存取
:return:
"""
for i in range(1,13): # 采用循環(huán)的方式進行依次爬取
time.sleep(random.randint(0, 10)) # 隨機睡眠0到40s防止ip被封
url="XXXX"
if i<10:
url =url+"20210"+str(i)+".html" # 拼接url
else:
url=url+"2021"+str(i)+".html"
html=self.html_downloader.download(url)
resultWeather=self.html_parser.parser(html)
if i==1:
t = ["日期", "最高氣溫", "最低氣溫", "天氣", "風向"]
resultWeather.insert(0,t)
self.data_storage.storage(resultWeather)
if __name__=="__main__":
main=SpiderMain()
main.start()
import requests as requests
class HtmlDownloader:
def download(self,url):
"""
根據(jù)給定的url下載網(wǎng)頁
:param url:
:return: 下載好的文本
"""
headers = {"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0"}
result = requests.get(url,headers=headers)
return result.content.decode('utf-8')
此處大家需要注意,將User-Agent換成自己瀏覽器訪問該網(wǎng)址的,具體如何查看呢,其實很簡單,只需大家進入網(wǎng)站后,右鍵網(wǎng)頁,然后點擊檢查將出現(xiàn)這樣的界面:然后只需再點擊網(wǎng)絡,再隨便點擊一個請求,如下圖:
就可以進入如下圖,然后再復制,圖中User-Agent的內(nèi)容就好了!
繼續(xù):
from bs4 import BeautifulSoup
class HtmlParser:
def parser(self,html):
"""
解析給定的html
:param html:
:return: area set
"""
weather = []
bs = BeautifulSoup(html, "html.parser")
body = bs.body # 獲取html中的body部分
div = body.find('div', {'class:', 'tian_three'}) # 獲取class為tian_three的<div></div>
ul = div.find('ul') # 獲取div中的<ul></ul>
li = ul.find_all('li') # 獲取ul中的所有<li></li>
for l in li:
tempWeather = []
div1 = l.find_all("div") # 獲取當前l(fā)i中的所有div
for i in div1:
tempStr = i.string.replace("℃", "") # 將℃進行替換
tempStr = tempStr.replace(" ", "") # 替換空格
tempWeather.append(tempStr)
weather.append(tempWeather)
return weather
import pandas as pd
class DataStorage:
def storage(self,weather):
"""
數(shù)據(jù)存儲
:param weather list
:return:
"""
data = pd.DataFrame(columns=weather[0], data=weather[1:]) # 格式化數(shù)據(jù)
data.to_csv("C:\\Users\\86183\\Desktop\\成都.csv", index=False, sep=",",mode="a") # 保存到csv文件當中
注意,文件保存路徑該成你們自己的哦!
ok,爬取代碼就到這,接下來是圖形化效果大致如下:
代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-754628.html
需要完整源碼,只需5元, 需要請加位心:ch18384322303,備注:xx源碼
好的這次就到這兒吧,我們下次見哦?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-754628.html
到了這里,關(guān)于【Python】實現(xiàn)爬蟲(完整版),爬取天氣數(shù)據(jù)并進行可視化分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!