Python作業(yè)20170526:天氣預(yù)報(bào)爬蟲

看了@chaosmindPython作業(yè) -- 天氣預(yù)報(bào)爬蟲驹愚,知道直接爬取為什么抓不到數(shù)據(jù)的原因焚碌。順便說(shuō)一下http://d1.weather.com.cn/calendar_new/2017/101280701_201706.html?_=1495720234075后面的_參數(shù)表示的是一個(gè)13位的Unix時(shí)間戳威始。這個(gè)數(shù)是根據(jù)你發(fā)起請(qǐng)求的時(shí)間來(lái)的。Python下可以通過(guò)time模塊的time方法得到。附上一個(gè)Unix時(shí)間戳在線轉(zhuǎn)換站長(zhǎng)工具伏蚊。

一、作業(yè)要求

爬取中國(guó)天氣網(wǎng) 你所在城市過(guò)去一年的歷史數(shù)據(jù)http://www.weather.com.cn/forecast/

二格粪、網(wǎng)址構(gòu)成

http://d1.weather.com.cn/calendar_new/2017/101280701_201706.html?_=1495720234075

代碼可以表示為

'http://d1.weather.com.cn/calendar_new/{year}/{city_id}_{date}.html?_={time}'.format(year=year, city_id=city_id, date=date, time=time)

三躏吊、解題思路

  1. 獲取今天的日期,得到年帐萎、月比伏,如201705
  2. 構(gòu)造一個(gè)url列表,日期為201605 - 201705
  3. 遍歷url列表獲取天氣信息

四疆导、數(shù)據(jù)獲取

返回的數(shù)據(jù)

從返回結(jié)果看赁项,天氣預(yù)報(bào)的信息存儲(chǔ)在一個(gè)json字符串中,賦值給var fc40。

五悠菜、參考代碼

import time
import datetime
from datetime import date
import requests
import json
import csv


base_url ='http://d1.weather.com.cn/calendar_new/{year}/{city_id}_{date}.html?_='

headers = {
    'Referer': 'http://www.weather.com.cn/weather40d/101300903.shtml',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
}

# 請(qǐng)求url舰攒,等到response
def get_html(url):
    return requests.get(url, headers=headers)

# datas = json.loads(get_html(base_url).content[11:])
# for i in datas:
#     print(i)

from datetime import timedelta

month = date.today().month
year = date.today().year
print(str(month).zfill(2))
print(str(year))

# 得到今天的日期:年、月
def get_today():
    today = {}
    year = date.today().year
    month = date.today().month
    today['year'] = year
    today['month'] = month
    return today

# 得到一年前的日期:年悔醋、月
def get_one_year_ago():
    one_year_ago = {}
    today = get_today() 
    one_year_ago['year'] = today.get('year') - 1
    one_year_ago['month'] = today.get('month')
    return one_year_ago

# 根據(jù)年摩窃、月的信息生成url列表
def generate_url_list(start_date, end_date, city_id = 101300903):
    weather_url_list = []
    dates = []
    for year  in range(start_date.get('year'), end_date.get('year') + 1):
        if year == end_date.get('year'):
            for month in range(1, start_date.get('month') + 1):
                date = {
                    'year': str(year),
                    'month': str(month).zfill(2)
                }
                dates.append(date)
        else:
            for month in range(start_date.get('month'), 12 + 1):
                date = {
                    'year': str(year),
                    'month': str(month).zfill(2)
                }
                dates.append(date)
    for date in dates:
        weather_url_list.append(
            base_url.format(
                year=date.get('year'), date=date.get('year') + date.get('month'), city_id = city_id)
                )
    return weather_url_list

# 清洗數(shù)據(jù),將清洗后的數(shù)據(jù)保存成csv文件
def parser_weather_data(resp):
    weather_infos = json.loads(resp[11:])
    for info in weather_infos:
        with open('weather_beiliu.csv', 'a') as  csv_file:
            writer = csv.writer(csv_file)
            writer.writerow(
                [info.get('date'), info.get('hgl'), info.get('hmax'), info.get('hmin'), info.get('nlyf') + info.get('nl'), info.get('wk')])


def main():
    with open('weather_beiliu.csv', 'w') as  csv_file:
        writer = csv.writer(csv_file)
        writer.writerow(['日期', '降水概率', '最高溫', '最低溫', '農(nóng)歷', '星期幾'])
    # 遍歷url芬骄,獲取天氣預(yù)報(bào)信息
    for url in generate_url_list(get_one_year_ago(), get_today()):        
        request_url = url + str(round(time.time()*1000))
        # 提醒信息
        print('獲取頁(yè)面:{}的數(shù)據(jù)'.format(request_url))
        parser_weather_data(get_html(request_url).content)
        time.sleep(1)

if __name__ == '__main__':
    main()

六猾愿、參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市账阻,隨后出現(xiàn)的幾起案子蒂秘,更是在濱河造成了極大的恐慌,老刑警劉巖淘太,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姻僧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡琴儿,警方通過(guò)查閱死者的電腦和手機(jī)段化,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)造成,“玉大人显熏,你說(shuō)我怎么就攤上這事∩故海” “怎么了喘蟆?”我有些...
    開(kāi)封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鼓鲁。 經(jīng)常有香客問(wèn)我蕴轨,道長(zhǎng),這世上最難降的妖魔是什么骇吭? 我笑而不...
    開(kāi)封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任橙弱,我火速辦了婚禮,結(jié)果婚禮上燥狰,老公的妹妹穿的比我還像新娘棘脐。我一直安慰自己,他們只是感情好龙致,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布蛀缝。 她就那樣靜靜地躺著,像睡著了一般目代。 火紅的嫁衣襯著肌膚如雪屈梁。 梳的紋絲不亂的頭發(fā)上嗤练,一...
    開(kāi)封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音在讶,去河邊找鬼煞抬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛构哺,可吹牛的內(nèi)容都是我干的此疹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼遮婶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了湖笨?” 一聲冷哼從身側(cè)響起旗扑,我...
    開(kāi)封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慈省,沒(méi)想到半個(gè)月后臀防,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡边败,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年袱衷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笑窜。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡致燥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出排截,到底是詐尸還是另有隱情嫌蚤,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布断傲,位于F島的核電站脱吱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏认罩。R本人自食惡果不足惜箱蝠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垦垂。 院中可真熱鬧宦搬,春花似錦、人聲如沸乔外。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杨幼。三九已至撇簿,卻和暖如春聂渊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背四瘫。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工汉嗽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人找蜜。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓饼暑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親洗做。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弓叛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,449評(píng)論 6 428
  • 這個(gè)天氣預(yù)報(bào)的爬蟲寫的比較簡(jiǎn)單,沒(méi)有坑很快就完成了诚纸,很適合我這種小白撰筷,而之前寫作業(yè)都是到大半夜才調(diào)試好的呀/(ㄒo...
    chaosmind閱讀 5,869評(píng)論 14 21
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣畦徘。awesome-p...
    若與閱讀 18,629評(píng)論 4 418
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評(píng)論 25 707
  • 2017年9月24日 星期日 天氣晴 八虛部位拍痧之三拍兩髀毕籽。 拍兩髀(大腿內(nèi)側(cè)與小腹交接處的腹股溝部位)治療一切...
    饒愛(ài)蘭閱讀 5,273評(píng)論 1 3