日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、使用的工具

單獨使用完成 pycharms 完成實驗,在分析的時候使用 Jupyter Notebook

在爬蟲所需要lxml和bs4這兩個庫已經確認安裝后,確保自己的已經安裝了pandas和matplotlib這兩個庫

1.安裝方式:

# 推薦使用清華鏡像下載速度較快
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

2.簡介

Pandas可以對數據進行導入、清洗、處理、統計和輸出Matplotlib能夠生成各種格式的圖形(諸如折線圖,散點圖,直方圖等等),界面可交互

二、基本思路

1.目的

爬取中國天氣網的溫度數據畫出溫度最高前10名的數據展示圖畫出溫度最低前10名的數據展示圖

2.步驟

2.1 爬取數據

分析網址

滿足http://www.weather.com.cn/textFC/{}.shtml的格式

定位于東北的網址:http://www.weather.com.cn/textFC/db.shtml
定位于華北的網址:http://www.weather.com.cn/textFC/hb.shtml
定位于華中的網址:http://www.weather.com.cn/textFC/hz.shtml


zone = ['db', 'hb', 'hd', 'hz', 'hn', 'xb', 'xn', 'gat'] for z in zone: url = "http://www.weather.com.cn/textFC/{}.shtml".format(z)

爬取數據

使用bs4庫來爬取中國天氣網的最高氣溫,存儲到一個列表HIGH_DATA中

具體分析可以看小編之前的數據分析的三種方法,在文章后面附加鏈接

HIGH_DATA = []
response = requests.get(url, headers=headers)
text = response.content.decode("utf-8")
soup = BeautifulSoup(text,'html5lib')
conMidtab = soup.find('div',class_='conMidtab')
tables = conMidtab.find_all('table')
for table in tables:
    trs = table.find_all('tr')[2:]
    for index,tr in enumerate(trs):   # ebumerate能夠取出對應的下標和值
        tds = tr.find_all('td')
        if index == 0:
            city_td = tds[1]
        else:
            city_td = tds[0]
            city = list(city_td.stripped_strings)[0]
            temp_td = tds[-5]
            max_temp = list(temp_td.stripped_strings)[0]
            HIGH_DATA.Append({"city": city, 'high_temp': int(max_temp)})

使用lxml庫來爬取中國天氣網的最低氣溫數據,存儲到一個列表LOW_DATA中

response = requests.get(url, headers=headers)
text = response.text.encode('ISO-8859-1')
trees = etree.HTML(text)
citys = trees.xpath('//div[@class="hanml"]/div[1]//td[@width="83"][@height="23"]/a/text()')
lows = trees.xpath('//div[@class="hanml"]/div[1]//td[@width="86"]/text()')
while True:
	if '最低氣溫' not in lows:
		break
	else:
		lows.remove('最低氣溫')
for i in zip(citys, lows):
	city, low = i
	LOW_DATA.append({"city": city, "low_temp": int(low)})

2.2 數據清洗

使用pandas的DataFrame對象來獲取前十名的數據

# 將取出的數據轉為DataFrame對象,相當于一個表格
i = pd.DataFrame(LOW_DATA)
j = pd.DataFrame(HIGH_DATA)
# 經過排序來取出前十名的數據,分別放在ten_low和ten_high中
ten_low = i.sort_values(by="low_temp", ascending=True)[0:10]
ten_high = j.sort_values(by="high_temp", ascending=True)[-10:]

2.3 繪制圖形

使用Matplotlib來繪制圖案,需要解決的問題為文本顯示問題還有符號顯示問題

具體的方法在代碼都已經說明

# 分區域繪圖subplot(行,列,第()個)
plt.subplot(2, 1, 1)
# 逆序排序取前面十個然后放在ten_low中
ten_low = i.sort_values(by="low_temp", ascending=True)[0:10]
# 設置x和y軸的字體為黑體(SimHei)/解決軸不能顯示字體的問題
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決不能顯示負號的問題
plt.rcParams['axes.unicode_minus'] = False
# 取出ten_low中的城市和氣溫
x1 = list(ten_low['city'])
y1 = list(ten_low['low_temp'])
# 畫出bar圖
plt.bar(x1, y1)
# 定義x和y軸的名稱
plt.xlabel('城市', fontproperties='SimHei')
plt.ylabel("溫度", fontproperties='SimHei')
# 定義圖表的名稱
plt.title("中國各個城市的今日溫度最低前十名", fontproperties='SimHei')
# 顯示bar圖上的數值
for x, y in zip(x1, y1):
	plt.text(x, y, '%s' % y, ha='center', va='bottom')

# 畫出第二個子圖
plt.subplot(2, 1, 2)
# 取出最低氣溫的后面十個數值
ten_high = j.sort_values(by="high_temp", ascending=True)[-10:]
x2 = list(ten_high['city'])
y2 = list(ten_high['high_temp'])
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
plt.bar(x2, y2)
plt.xlabel('城市', fontproperties='SimHei')
plt.ylabel("溫度", fontproperties='SimHei')
plt.title("中國各個城市的今日溫度最高前十名", fontproperties='SimHei')
for x, y in zip(x2, y2):
	plt.text(x, y, '%s' % y, ha='center', va='bottom')
# 調整每隔子圖之間的距離(默認)
plt.tight_layout()
plt.show()

2.3 實驗結果

Python爬蟲+數據分析實戰–爬取并分析中國天氣網的溫度信息

 

注:5月25日的數據(以實戰當天為準)

三、源代碼

用函數進行封裝

import requests
import pandas as pd
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
from lxml import etree
import matplotlib.pyplot as plt
'''
爬取中國天氣網的溫度數據并匯總
畫出溫度最高前10名的數據展示圖
畫出溫度最低前10名的數據展示圖
'''
headers = {
    "user-agent": UserAgent().random
}
HIGH_DATA = []
LOW_DATA = []

# 使用bs4庫的BeautifSoup對象來獲取最高溫度的數據,使用HIGH_DATA來存放數據
def get_high_temperature(url):
    response = requests.get(url, headers=headers)
    text = response.content.decode("utf-8")
    soup = BeautifulSoup(text,'html5lib')
    conMidtab = soup.find('div',class_='conMidtab')
    tables = conMidtab.find_all('table')
    for table in tables:
        trs = table.find_all('tr')[2:]
        for index,tr in enumerate(trs):   # ebumerate能夠取出對應的下標和值
            tds = tr.find_all('td')
            if index == 0:
                city_td = tds[1]
            else:
                city_td = tds[0]
            city = list(city_td.stripped_strings)[0]
            temp_td = tds[-5]
            max_temp = list(temp_td.stripped_strings)[0]
            HIGH_DATA.append({"city": city, 'high_temp': int(max_temp)})

# 使用lxml庫的xpath方法來獲取最低溫度的數據,使用LOW_DATA來存儲數據
def get_low_temperature(url):
    response = requests.get(url, headers=headers)
    text = response.text.encode('ISO-8859-1')
    trees = etree.HTML(text)
    citys = trees.xpath('//div[@class="hanml"]/div[1]//td[@width="83"][@height="23"]/a/text()')
    lows = trees.xpath('//div[@class="hanml"]/div[1]//td[@width="86"]/text()')
    while True:
        if '最低氣溫' not in lows:
            break
        else:
            lows.remove('最低氣溫')
    for i in zip(citys, lows):
        city, low = i
        LOW_DATA.append({"city": city, "low_temp": int(low)})

# 使用pandas來格式化數據,使用matplotlib.pyplot 畫圖
def draw_picture(LOW,HIGH):
    i = pd.DataFrame(LOW)
    j = pd.DataFrame(HIGH)
    # 分區域繪圖subplot(行,列,第()個)
    plt.subplot(2, 1, 1)
    # 逆序排序取前面十個然后放在ten_low中
    ten_low = i.sort_values(by="low_temp", ascending=True)[0:10]
    # 設置x和y軸的字體為黑體(SimHei)/解決軸不能顯示字體的問題
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 解決不能顯示負號的問題
    plt.rcParams['axes.unicode_minus'] = False
    # 取出ten_low中的城市和氣溫
    x1 = list(ten_low['city'])
    y1 = list(ten_low['low_temp'])
    # 畫出bar圖
    plt.bar(x1, y1)
    # 定義x和y軸的名稱
    plt.xlabel('城市', fontproperties='SimHei')
    plt.ylabel("溫度", fontproperties='SimHei')
    # 定義圖表的名稱
    plt.title("中國各個城市的今日溫度最低前十名", fontproperties='SimHei')
    # 顯示bar圖上的數值
    for x, y in zip(x1, y1):
        plt.text(x, y, '%s' % y, ha='center', va='bottom')

    # 畫出第二個子圖
    plt.subplot(2, 1, 2)
    # 取出最低氣溫的后面十個數值
    ten_high = j.sort_values(by="high_temp", ascending=True)[-10:]
    x2 = list(ten_high['city'])
    y2 = list(ten_high['high_temp'])
    # plt.rcParams['font.sans-serif'] = ['SimHei']
    # plt.rcParams['axes.unicode_minus'] = False
    plt.bar(x2, y2)
    plt.xlabel('城市', fontproperties='SimHei')
    plt.ylabel("溫度", fontproperties='SimHei')
    plt.title("中國各個城市的今日溫度最高前十名", fontproperties='SimHei')
    for x, y in zip(x2, y2):
        plt.text(x, y, '%s' % y, ha='center', va='bottom')
    # 調整每隔子圖之間的距離(默認)
    plt.tight_layout()
    plt.show()


def main():
    zone = ['db', 'hb', 'hd', 'hz', 'hn', 'xb', 'xn', 'gat']
    for z in zone:
        url = "http://www.weather.com.cn/textFC/{}.shtml".format(z)
        get_high_temperature(url)
        get_low_temperature(url)
    draw_picture(LOW_DATA,HIGH_DATA)


if __name__ == '__main__':
    main()

寫在最后

在實戰出現l什么問題可以隨時留言告訴小編,另外附加一個bug,在每天晚上中國天氣網當天的最高氣溫可能會發生變化,數據會被清除變成‘-’,導致實驗失敗,注意自己的實戰時間

Python爬蟲+數據分析實戰–爬取并分析中國天氣網的溫度信息

 

我發現湖南長沙這邊才是最熱的 一個南方城市 居然能達到39 40 ° 太可怕了呀 對了 源碼獲取記得加后臺私信小編 源碼 獲取

分享到:
標簽:爬蟲 Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定