定時(shí)從某網(wǎng)站爬取壓縮包

一、緣 起

要買房啰脚,但是大西安現(xiàn)在可謂是一房難求殷蛇,大家都爭先恐后地排隊(duì)交資料、搖號(hào)橄浓。截止到現(xiàn)在粒梦,筆者已經(jīng)參與過6個(gè)樓盤的搖號(hào)/選房,但種種原因荸实,依然沒買到合適的房子匀们,無奈,一首 涼~ 涼~ 回蕩在心~
價(jià)格公示泪勒,每次都會(huì)在買房群里熱議昼蛀,因?yàn)榭吹叫鹿嫉膬r(jià)格就意味著有更多房源即將開盤,大家買房的熱情又會(huì)被重新點(diǎn)燃~
閃念圆存,有一次的一個(gè)念想叼旋,如果能實(shí)時(shí)監(jiān)控物價(jià)局官網(wǎng)、自動(dòng)下載壓縮包并提醒我沦辙,這樣豈不快哉夫植,于是之前了解的一點(diǎn)點(diǎn)網(wǎng)絡(luò)爬蟲就派上用場~
于是,開干!

二详民、思 路

首先延欠,用selenium(PhantomJS)爬取網(wǎng)站的下載鏈接
然后,用Python request模塊的urlretrieve() 方法下載壓縮包
接著沈跨,用Python zipfile模塊的extractall()方法解壓
最后由捎,定時(shí)運(yùn)行腳本,有下載更新時(shí)候彈出提示

三饿凛、說 明

軟件模塊
  1. Python3.6 + PhantomJS + .vbs腳本 + .bat腳本
  2. PhantomJS:因?yàn)橐鰧?shí)時(shí)監(jiān)控狞玛,所以爬取網(wǎng)頁鏈接必須在后臺(tái)運(yùn)行, 而PhantomJS正可謂是無界面版的Selenium僅個(gè)人通俗的理解涧窒,對(duì)PhantomJS更準(zhǔn)確的說明和用法請(qǐng)自行百度
  3. 定時(shí)運(yùn)行心肪,首先想到的是Jenkins持續(xù)集成,但鑒于筆者對(duì)Jenkins不甚熟悉纠吴,并且目前也只想基于Windows運(yùn)行硬鞍,故選擇了較為簡單的方法,即在Windows下添加定時(shí)任務(wù)戴已,具體方法請(qǐng)自行百度固该,很簡單
  4. 因?yàn)?em>.bat批處理腳本調(diào)用Python腳本每次都會(huì)打開cmd命令框,所以用.vbs腳本來調(diào)用Python腳本
  5. 更新提醒恭陡,可以發(fā)送郵件蹬音,但是筆者用了最簡單的方法上煤,即有更新時(shí)候調(diào)用openFolder.bat批處理腳本自動(dòng)打開house_prices文件夾

四休玩、實(shí) 現(xiàn)

先上兩張物價(jià)局官網(wǎng)

一級(jí)下載頁面

二級(jí)下載頁面

  • downloadZip.py
  1. 主程序分為兩部分,get_url()函數(shù)用于從一級(jí)下載頁面爬取鏈接劫狠,初次運(yùn)行腳本會(huì)將一級(jí)下載頁面首頁的所有鏈接爬取下來并寫入txt拴疤,后面如果再有更新,只會(huì)將最新的一級(jí)下載頁面鏈接追加到txt里面独泞,當(dāng)get_url()函數(shù)返回值為0呐矾,表示無更新,返回值為1表示初次運(yùn)行腳本懦砂,否則表示有部分更新
......
from selenium import webdriver


def get_url():

    """
    獲取url并寫入txt
    :return:download_flag 
    """
    # 頁面為iframe框架
    driver.switch_to.frame('iframecenter')
    date_list = driver.find_elements_by_xpath('.//*[@id="tablelist"]/tbody/tr/td[3]/span')
    fw = open(cur_path + "/house_prices/url_list.txt", 'a')
    fr = open(cur_path + "/house_prices/url_list.txt", 'r')
    download_flag = 0
    # print(fr.readlines())
    f_list = fr.readlines()
    # print(f_list)
    if len(f_list) == 0:
        for i in reversed(range(len(date_list))):   # 寫入順序?yàn)闀r(shí)間逆序
            fw.writelines(driver.find_elements_by_id('linkId')[i].get_attribute('href'))
            fw.write('\n')
        download_flag = 1
    else:
        # 獲取txt文件里面最新的一級(jí)下載頁面鏈接的trid
        f_latest_num = int(f_list[-1].split('=')[1])
        for i in reversed(range(0, 5)):   
        # 獲取當(dāng)前網(wǎng)站最新的5條一級(jí)下載頁面鏈接及trid蜒犯,如果當(dāng)前網(wǎng)站的trid > txt最新的trid,則追加到txt
            latest_url = driver.find_elements_by_id('linkId')[i].get_attribute('href')
            latest_url_num = int(latest_url.split('=')[1])
            if f_latest_num < latest_url_num:
                fw.writelines(latest_url)
                fw.write('\n')
                download_flag = download_flag + 1

    fw.close()
    return download_flag
  1. 主程序第二部分荞膘,download_zip()函數(shù)根據(jù)get_url()函數(shù)返回值判斷罚随,是否要進(jìn)入二級(jí)下載頁面下載壓縮包,并且只有在有下載發(fā)生時(shí)候才調(diào)用openFolder.bat打開house_prices文件夾羽资,做以提示淘菩,否則不執(zhí)行下載函數(shù)不打開文件夾
......
from urllib import request
import zipfile
import os
......
def download_zip():

    """
    從txt中讀取url并下載zip
    :return:
    """
    flag = get_url()
    if flag == 1:
        fr = open(cur_path + "/house_prices/url_list.txt", 'r')
        all_lines = fr.readlines()
        for line_url in all_lines:
            driver.get(line_url)
            driver.implicitly_wait(15)
            # 頁面為iframe框架
            driver.switch_to.frame('showconent1')
            download_url = driver.find_element_by_partial_link_text('商品住房價(jià)格')
            download_url = download_url.get_attribute('href')
            zipname = cur_path + '/house_prices/' + download_url.split('/')[6]
            filename = zipname.split('.')[0]
            request.urlretrieve(download_url, zipname)
            # 解壓并刪除壓縮包
            try:
                with zipfile.ZipFile(zipname) as zfile:
                    zfile.extractall(path=filename)
                if os.path.exists(zipname):
                    os.remove(zipname)
            except zipfile.BadZipFile as e:
                print(filename + " is a bad zip file ,please check!")

        # 有更新數(shù)據(jù)打開文件夾
        os.system(cur_path + "/openFolder.bat")

    elif flag != 1 and flag != 0:
        fr = open(cur_path + "/house_prices/url_list.txt", 'r')
        all_lines = fr.readlines()
        for line_url in range(flag):
            driver.get(all_lines[-line_url-1])
            driver.implicitly_wait(15)
            driver.switch_to.frame('showconent1')
            # download_url = driver.find_element_by_xpath('/html/body/div/div[3]/p[3]/a')
            download_url = driver.find_element_by_partial_link_text('商品住房價(jià)格')
            download_url = download_url.get_attribute('href')
            zipname = cur_path + '/house_prices/' + download_url.split('/')[6]
            filename = zipname.split('.')[0]
            request.urlretrieve(download_url, zipname)
            # 解壓并刪除壓縮包
            try:
                with zipfile.ZipFile(zipname) as zfile:
                    zfile.extractall(path=filename)
                if os.path.exists(zipname):
                    os.remove(zipname)
            except zipfile.BadZipFile as e:
                print(filename + " is a bad zip file ,please check!")

        # 有更新數(shù)據(jù)打開文件夾
        os.system(cur_path + "/openFolder.bat")
  • autoDownloadZip.vbs
    用于調(diào)用Python腳本且不會(huì)打開cmd命令框
currentpath = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
createobject("wscript.shell").run currentpath + "\downloadZip.py",0
添加定時(shí)任務(wù)腳本

設(shè)置定時(shí)任務(wù)
  • openFolder.bat
    用于打開house_prices文件夾
start %~dp0\house_prices

五、最 后

Git地址:https://gitee.com/freedomlidi/autoDownloadZip.git

OK屠升!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潮改,一起剝皮案震驚了整個(gè)濱河市狭郑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汇在,老刑警劉巖翰萨,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異糕殉,居然都是意外死亡缨历,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門糙麦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辛孵,“玉大人,你說我怎么就攤上這事∨繁瘢” “怎么了框往?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冶匹。 經(jīng)常有香客問我,道長咆瘟,這世上最難降的妖魔是什么嚼隘? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮袒餐,結(jié)果婚禮上飞蛹,老公的妹妹穿的比我還像新娘。我一直安慰自己灸眼,他們只是感情好卧檐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焰宣,像睡著了一般霉囚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匕积,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天盈罐,我揣著相機(jī)與錄音,去河邊找鬼闪唆。 笑死盅粪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苞氮。 我是一名探鬼主播湾揽,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了库物?” 一聲冷哼從身側(cè)響起霸旗,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戚揭,沒想到半個(gè)月后诱告,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡民晒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年精居,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潜必。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靴姿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磁滚,到底是詐尸還是另有隱情佛吓,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布垂攘,位于F島的核電站维雇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏晒他。R本人自食惡果不足惜吱型,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陨仅。 院中可真熱鬧津滞,春花似錦、人聲如沸掂名。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饺蔑。三九已至,卻和暖如春嗜诀,著一層夾襖步出監(jiān)牢的瞬間猾警,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工隆敢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留发皿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓拂蝎,卻偏偏與公主長得像穴墅,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 5.3 Windows安裝說明 譯者:Python 文檔協(xié)作翻譯小組玄货,原文:Windows Installatio...
    布客飛龍閱讀 1,686評(píng)論 0 4
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,985評(píng)論 1 3
  • 今天用到一個(gè)第三方庫皇钞,其中有用到EventBus,bug模式下都是可以的松捉,本想打個(gè)release包就可以交差夹界,結(jié)果...
    pinkong閱讀 1,516評(píng)論 3 0
  • (一) 雪擁梅花照眼明,也無癡怨也無聲隘世。 芬芳本合寒冬夜可柿,何必他人憐欲傾。 (二) 誰惜香寒晚折瓊丙者,臘梅宿雪寂無聲...
    一襟月光閱讀 421評(píng)論 1 1
  • 霹靂滂沱雨复斥,撥云見日晴。 騎馬看長安械媒,風(fēng)疾花未竟永票。 功名今日畢,抱負(fù)來日行滥沫。 但惟心中熱侣集,至今未涼息。
    仲宣樓小竹林閱讀 196評(píng)論 0 0