廿壹-爬 URL 涧黄、Python 異步 、Supervisor 安裝配置等事宜

1.綜述

偽代碼 可以參考《廿-爬URL以及分詞情緒分析初步設(shè)想》赋荆,才發(fā)現(xiàn)這個(gè)要做一整天才做得出來(lái)笋妥,不過(guò)大部分時(shí)間都是用來(lái) 部署 服務(wù)器。

代碼放在大型同性交友網(wǎng)站
其實(shí)根據(jù) 偽代碼 來(lái)寫(xiě)程序很簡(jiǎn)單窄潭,但主要有很多地方卡住春宣,需要現(xiàn)學(xué)現(xiàn)賣(mài),以下均為現(xiàn)學(xué)的點(diǎn)嫉你。

2.關(guān)鍵技術(shù)點(diǎn)

2.1 Python Class

關(guān)于 Python月帝,對(duì)于其他 腳本語(yǔ)言 的類來(lái)說(shuō)并無(wú)太大差異,但不知道是不是習(xí)慣了 JS 的閉包幽污,寫(xiě)到 Python 上就會(huì)很多莫名其妙的錯(cuò)誤嚷辅。
而且其實(shí)本次并無(wú) 繼承 方面的需求,所以純粹是為了寫(xiě) 而寫(xiě)距误。

2.2 異步

異步 這東西用在 Python 上面簡(jiǎn)直是崩潰簸搞,所以我不懂為什么那么多人喜歡 Python(還是因?yàn)樗翘焐?同步 的所以才那么多人喜歡么?還是純粹是因?yàn)樗泻芏喟盍龋浚?br> Python 異步比較多的是 asyncio 攘乒。
關(guān)于 asyncio ,我覺(jué)得最絕望的是惋鹅,根本不知道怎么 列隊(duì)则酝!就是如何啟動(dòng),我嘗試過(guò)兩種辦法:


# --------- 以下不懂闰集,失敗嘗試-------------
class classSpy():
    def __init__(self, arrInProxy):
        self.arrProxy = iter(arrInProxy)

    def __aiter__(self):
        return self

    async def __anext__(self):
        try:
            eleProxy = next(self.arrProxy)
        except StopIteration:
            raise StopAsyncIteration
        return eleProxy


arrTmp = []
arrTmp.append(1)
arrTmp.append(2)
arrTmp.append(3)
arrTmp.append(4)
arrTmp.append(5)
arrTmp.append(6)


async def run():
    print('Begin : '+time.strftime('%Y-%m-%d %H:%M:%S'))
    async for eleBe in classSpy(arrTmp):
        await asyncio.sleep(random.randint(1, 3))
        print('  Now : ' + str(eleBe) + ' , time: ' +
              time.strftime('%Y-%m-%d %H:%M:%S'))
    print('End : '+time.strftime('%Y-%m-%d %H:%M:%S'))
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
# ------------------------------------------


# --------- 以下為異步嘗試成功-------------
arrTmp = []
arrTmp.append(1)
arrTmp.append(2)
arrTmp.append(3)
arrTmp.append(4)
arrTmp.append(5)
arrTmp.append(6)


async def run(eleBe, inSemaphore):
    async with inSemaphore:
        await asyncio.sleep(random.randint(1, 3))
        print('  Now : ' + str(eleBe) + ' , time: ' +
              time.strftime('%Y-%m-%d %H:%M:%S'))


def funDone(waittask):
    print('Callback End : '+time.strftime('%Y-%m-%d %H:%M:%S'))


print('Begin : '+time.strftime('%Y-%m-%d %H:%M:%S'))

# -------------調(diào)用方式1----------------


async def main():
    semaphore = asyncio.Semaphore(2)
    waittask = asyncio.gather(*([run(proxy, semaphore) for proxy in arrTmp]))
    waittask.add_done_callback(funDone)
    await asyncio.gather(waittask)
asyncio.run(main())
# -------------------------------------


# -------------調(diào)用方式2----------------
loop = asyncio.get_event_loop()
semaphore = asyncio.Semaphore(2)
waittask = asyncio.gather(*([run(proxy, semaphore) for proxy in arrTmp]))
waittask.add_done_callback(funDone)
loop.run_until_complete(waittask)
loop.close()
# -------------------------------------


print('Program End : '+time.strftime('%Y-%m-%d %H:%M:%S'))
# ------------------------------------------


其中我嘗試了很久沽讹,然后最終還是得去參考官方文檔。參考的文檔如下:

很艱難終于能 啟動(dòng) 真正的 異步 處理了爽雄,如上述方法2,但是在 多線程異步 的時(shí)候沐鼠,發(fā)現(xiàn) Loop 在同一程序中不支持 同時(shí)多次調(diào)用挚瘟,找了好久終于找到以下方法:

2.2 Python 鏈接 MongoDB

這個(gè)真是一個(gè)大坑叹谁,例如

  1. find() 函數(shù) 在 Python 中還是 find()
  2. findOne() 函數(shù)在 Python 中就是 find_one()
  3. deleteMany() 函數(shù)在 Python 中就是 delete_many()
  4. 因?yàn)?Python 沒(méi)有 JSON,所以只能用字典乘盖,如:{$lt:10} 要寫(xiě)成 {'$lt':10}

參考資料有:
某個(gè)資料

2.3 網(wǎng)頁(yè)請(qǐng)求及解析

這個(gè)倒比較方便焰檩,直接用人家寫(xiě)好的就行了,參考資料如下:
別人的資料

2.4 超時(shí)重復(fù)請(qǐng)求

當(dāng)有當(dāng)前引用的代理 超時(shí) 的時(shí)候订框,請(qǐng)求另外的 代理服務(wù)器析苫,但好像沒(méi)有特定的處理辦法,所以只有參考材料穿扳,做一個(gè) While 做判斷是否超時(shí)衩侥,相關(guān)代碼如參考文章:
參考文章

3.部署Python程序

這個(gè)是真的是一個(gè)巨坑,我都不想弄了矛物,但沒(méi)辦法茫死,都已經(jīng)開(kāi)始了。
NodeJS 我是用 PM2 的泽谨,PM2 其實(shí)也有一些坑璧榄,例如在 Start 一個(gè)項(xiàng)目后,需要 SaveStartup 以達(dá)到 開(kāi)機(jī)啟動(dòng) 的環(huán)境吧雹,但是中間需要配置一個(gè) 環(huán)境配置,不然開(kāi)機(jī)后仍然無(wú)法啟動(dòng)涂身。
Python 的程序管理軟件有一個(gè) Supervisord 雄卷,從很久之前就在用這個(gè),可是重新配置還是很麻煩的蛤售。

3.1 關(guān)于安裝

在裝這個(gè)軟件時(shí)丁鹉,我發(fā)現(xiàn) 騰訊云 服務(wù)器是沒(méi)有預(yù)裝 Pip 的,裝完 Pip 之后再裝 Supervisord 發(fā)現(xiàn)很多東西根本沒(méi)有配置悴能,直到找到這個(gè)文章:
centos7安裝supervisor詳細(xì)教程
可是我已經(jīng)裝好了揣钦,用了一個(gè)不推薦的方法,唉漠酿。

3.2 關(guān)于配置

沒(méi)關(guān)系冯凹,裝好之后,為什么 配置 那么麻煩炒嘲。因?yàn)槲沂窍肟纯次业某绦蜉敵鲇钜Γ员仨毎?托管程序 的輸出 輸出 到某個(gè)目錄下,配置好麻煩夫凸,以下是主要能實(shí)施我功能的配置浑劳。
配置介紹

[program:spylink]
command=python3 /home/Berry/Repositories/SpyTheLink/run.py ; 這個(gè)就是我的路徑了,因?yàn)槲矣?Python3 寫(xiě)的夭拌,所以這個(gè)比較重要
directory=/home/Berry/Repositories/SpyTheLink              ; directory to cwd to before exec (def no cwd)魔熏,這個(gè)需要配置衷咽,不然配置文件找不到路徑
autostart=true       ; start at supervisord start (default: true) ,這個(gè)是當(dāng)然的
startsecs=10         ; number of secs prog must stay running (def. 1)
autorestart=true     ; whether/when to restart (default: unexpected)
startretries=0       ; max # of serial start failures (default 3)
user=Berry          ; setuid to this UNIX account to run the program蒜绽,用Root不能運(yùn)行我也不知道為什么镶骗,好像沒(méi)設(shè)可運(yùn)行?還是運(yùn)行環(huán)境問(wèn)題滓窍?
priority=999         ; the relative start priority (default 999)
redirect_stderr=false ; redirect proc stderr to stdout (default false)卖词,因?yàn)槲也恍枰磗tderr的,主要看輸出結(jié)果(錯(cuò)是很正常的這種趕出來(lái)的程序)
stdout_logfile_maxbytes=10MB  ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups = 10   ; # of stdout logfile backups (default 10)
stdout_logfile=/home/Berry/Repositories/SpyTheLink/logs/spylink.out
stderr_logfile=/home/Berry/Repositories/SpyTheLink/logs/spylink.err       ; stderr log path, NONE for none; default AUTO
stderr_logfile_maxbytes=10MB   ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=10     ; # of stderr logfile backups (default 10)
loglevel=info         ;(log level;default info; others: debug,warn,trace)吏夯,因?yàn)槲沂切枰敵鲂畔⒋蓑冢圆恍枰渌J(rèn)就好

4.后記

需要做一個(gè)以 Django 做為服務(wù)器端的人工判斷器并記錄噪生,我可能需要再思考一下我該怎么做下一步先裆赵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市跺嗽,隨后出現(xiàn)的幾起案子战授,更是在濱河造成了極大的恐慌,老刑警劉巖桨嫁,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件植兰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡璃吧,警方通過(guò)查閱死者的電腦和手機(jī)楣导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)畜挨,“玉大人筒繁,你說(shuō)我怎么就攤上這事“驮” “怎么了毡咏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逮刨。 經(jīng)常有香客問(wèn)我呕缭,道長(zhǎng),這世上最難降的妖魔是什么禀忆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任臊旭,我火速辦了婚禮,結(jié)果婚禮上箩退,老公的妹妹穿的比我還像新娘离熏。我一直安慰自己,他們只是感情好戴涝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布滋戳。 她就那樣靜靜地躺著钻蔑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奸鸯。 梳的紋絲不亂的頭發(fā)上咪笑,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音娄涩,去河邊找鬼窗怒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蓄拣,可吹牛的內(nèi)容都是我干的扬虚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼球恤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辜昵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起咽斧,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤堪置,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后张惹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體舀锨,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年宛逗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雁竞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拧额,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彪腔,到底是詐尸還是另有隱情侥锦,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布德挣,位于F島的核電站恭垦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏格嗅。R本人自食惡果不足惜番挺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屯掖。 院中可真熱鬧玄柏,春花似錦、人聲如沸贴铜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至徘意,卻和暖如春苔悦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椎咧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工玖详, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勤讽。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓蟋座,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親地技。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜈七,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 轉(zhuǎn)載,原文鏈接:http://blog.csdn.net/xyang81/article/details/5155...
    think_lonely閱讀 2,449評(píng)論 0 4
  • 幾度昏睡過(guò)去莫矗, 沉醉夢(mèng)里不醒飒硅, 朦朧夢(mèng)靨不去, 睡眼惺忪不開(kāi)作谚。 行尸走肉一般三娩, 做起直立腰椎, 下床微微顫顫妹懒, 迷...
    愛(ài)吃餅干的熊閱讀 114評(píng)論 0 2
  • 自屬都湖往碧塔海雀监,途中要經(jīng)過(guò)一片草甸。 甸不是原眨唬,有范圍局限的会前,但依舊感覺(jué)碩大,翠綠養(yǎng)眼匾竿。 觀景臺(tái)有小賣(mài)部瓦宜,居然還...
    三峽孬張閱讀 548評(píng)論 0 8
  • 笛卡爾誕生于1596年,提到他人們往往會(huì)想到他創(chuàng)建的平面平面直角坐標(biāo)系岭妖,是近代解析幾何之父临庇,是著名大數(shù)學(xué)家。 但笛...
    子游的青鳥(niǎo)閱讀 2,339評(píng)論 0 1
  • 感受是靈魂的語(yǔ)言昵慌。 你最高的真實(shí)便隱藏在你最深的感受里假夺。 最高的思維永遠(yuǎn)是那包含著喜悅的思維。 最清楚的話語(yǔ)永遠(yuǎn)是...
    Lucky_Angel心空間閱讀 301評(píng)論 0 4