從python開(kāi)始一個(gè)全棧項(xiàng)目 程序員&設(shè)計(jì)師福利篇

更新 7月16日18點(diǎn)

現(xiàn)在不會(huì)自己寫代碼調(diào)用API的同志們可以直接訪問(wèn)咯

地址 datastack.cc/design
更新一張預(yù)覽圖:

圖片發(fā)自簡(jiǎn)書(shū)App

圖片發(fā)自簡(jiǎn)書(shū)App
更新 7月16日12點(diǎn)

現(xiàn)在我們可以愉快的使用了橱健,flask API和后臺(tái)服務(wù)已經(jīng)部署在了服務(wù)器上(新加坡)F破拧0萌薄袭灯!

地址 http://api.datastack.cc

恩残揉,更新一下睬魂,目前已經(jīng)可以在HTML頁(yè)面進(jìn)行數(shù)據(jù)展示了:

web界面運(yùn)行效果圖
配圖純屬為了好看

我在說(shuō)什么

聲明:
1.我不是一個(gè)標(biāo)題黨
2.我一般只提供干貨

事實(shí)上愚墓,我實(shí)在干這樣一件事杠氢,他大概分為如下幾個(gè)步驟:

一、獲取一些優(yōu)秀的設(shè)計(jì)素材的數(shù)據(jù)
二续崖、存儲(chǔ)和篩選這些數(shù)據(jù)
三敲街、編寫一套API提供數(shù)據(jù)
四、編寫一個(gè)網(wǎng)頁(yè)調(diào)用API 展現(xiàn)數(shù)據(jù)
五严望、編寫iso和android客戶端展現(xiàn)數(shù)據(jù)

應(yīng)用場(chǎng)景:
當(dāng)你在閑暇的時(shí)候多艇,打開(kāi)手機(jī)或者網(wǎng)頁(yè),查看一下最近有沒(méi)有什么好的設(shè)計(jì)素材或者比較感興趣的HTML頁(yè)面像吻。
恩峻黍,你可能看到很多复隆,突然發(fā)現(xiàn)一個(gè)讓你眼前一亮的,然后你手藏了他姆涩。
有一天你正在寫一個(gè)HTML頁(yè)面或者設(shè)計(jì)產(chǎn)品原型挽拂,突然,你的腦子里閃過(guò)一些東西骨饿,于是你打開(kāi)了你的手機(jī)查看了一下收藏夾......

接下來(lái)亏栈,我們就來(lái)看看,如何實(shí)現(xiàn):

數(shù)據(jù)獲取

首先样刷,數(shù)據(jù)主要是從各大免費(fèi)的設(shè)計(jì)素材資源網(wǎng)站拿到的,這需要用到python爬蟲(chóng)览爵。
其次置鼻,這類網(wǎng)站大量的使用了JS來(lái)加載內(nèi)容,我選擇selenium+phantomJS渲染JS蜓竹。
最后箕母,從爬取到的內(nèi)容內(nèi)獲取想要的,我選擇用pyquery來(lái)獲取html節(jié)點(diǎn)(不要問(wèn)為什么俱济,因?yàn)槲伊?xí)慣用jqueryK皇恰)

存儲(chǔ)數(shù)據(jù)

數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)很簡(jiǎn)單,我不過(guò)就是想獲取一張預(yù)覽圖蛛碌,一個(gè)預(yù)覽地址(或者下載地址)聂喇,還有標(biāo)題!
一條數(shù)據(jù)大概會(huì)是這樣:

{
  "download": "http://www.doooor.com/thread-2762-1.html",
  "preview": "http://img.doooor.com/img/forum/201404/16/173909sczpof6sf26eckcf.jpg.thumb.jpg",
  "title": "STARS TOUCH 完全扁平化網(wǎng)頁(yè)設(shè)計(jì)"
}
數(shù)據(jù)持久化

我們對(duì)數(shù)據(jù)的存儲(chǔ)要求不是很高蔚携,因?yàn)樽罱趯W(xué)習(xí)redis希太,所以就用redis,利用快照持久化酝蜒!

爬蟲(chóng)的框架

一誊辉、我不懂什么框架,而且總體來(lái)說(shuō)亡脑,要爬取得網(wǎng)站就那幾個(gè)堕澄。自己編寫一下規(guī)則就好了。
二霉咨、避免重復(fù)工作蛙紫,用redis來(lái)存儲(chǔ)待爬和爬過(guò)的url。
三途戒、分布式惊来? 哈哈,也許棺滞,可能大概是支持的吧裁蚁。
四矢渊、效率?使用了selenium和phantomJS枉证,貌似不用談效率了矮男,不過(guò)有些優(yōu)化的小知識(shí)啦!
五室谚、我是怎么實(shí)現(xiàn)的:
首先毡鉴,我定義了一個(gè)爬蟲(chóng)服務(wù) service.py,主要作用是連接redis秒赤,開(kāi)始爬取工作猪瞬,記錄工作內(nèi)容和工作結(jié)果。
然后入篮,我寫了一個(gè)爬蟲(chóng)工具 servicetools.py, 主要作用是模擬瀏覽器訪問(wèn)url陈瘦,查找需要的元素和內(nèi)容。

service.py 管理者-勞動(dòng)者模式 (管理者M(jìn)aster發(fā)布任務(wù)潮售,勞動(dòng)者Work進(jìn)行具體工作.)

管理者維護(hù)一個(gè)Redis 的 List 按照先進(jìn)先出的模式痊项, 每次發(fā)布一個(gè)url出去
勞動(dòng)者接收到管理者的url,開(kāi)始執(zhí)行網(wǎng)頁(yè)爬取工作酥诽,工作完成后 管理者pop掉這個(gè)url
勞動(dòng)者如果獲取的數(shù)據(jù)是url,則封裝成list 提交給管理者鞍泉, 管理者挨個(gè)push url.

servicetools.py(具體的網(wǎng)頁(yè)爬取工作)

使用phantomJS和selenium結(jié)合,使用pyquery進(jìn)行節(jié)點(diǎn)和內(nèi)容的獲取肮帐,不同的網(wǎng)站需要不同的規(guī)則咖驮。

目前實(shí)現(xiàn)的功能 和存在問(wèn)題:

總體來(lái)說(shuō),運(yùn)行良好训枢,效率足夠(根本不是實(shí)時(shí)系統(tǒng)嘛)游沿!
額,比較費(fèi)內(nèi)存肮砾,可以在晚上睡覺(jué)之前執(zhí)行诀黍,偶爾會(huì)出現(xiàn)假死,主要是phantomJS的優(yōu)化沒(méi)做仗处!
如果程序異常推出眯勾,再次啟動(dòng)依舊能夠繼續(xù)工作,且不重復(fù)之前工作婆誓!

API的實(shí)現(xiàn)

上面的爬蟲(chóng)運(yùn)行半個(gè)小時(shí)之后吃环,大概就會(huì)有500多條有效數(shù)據(jù),這些數(shù)據(jù)全部被存在redis里面(hset)洋幻。
可以參見(jiàn)我之前的文章快速入門 基于Flask實(shí)現(xiàn)Restful風(fēng)格API,比較詳細(xì)的介紹了如何使用flask來(lái)實(shí)現(xiàn)一個(gè)restful的API郁轻。

這里的flask程序需要從redis拿數(shù)據(jù),我自己定義了一個(gè)數(shù)據(jù)源(連接redis分發(fā)數(shù)據(jù))。

目前已經(jīng)完成的工作

目前已經(jīng)基本實(shí)現(xiàn)API獲取數(shù)據(jù)好唯,爬蟲(chóng)還正在努力的運(yùn)行竭沫,穩(wěn)定以后,將會(huì)設(shè)置系統(tǒng)任務(wù)骑篙,在每天半夜3點(diǎn)開(kāi)始蜕提,五點(diǎn)結(jié)束。

看一張效果圖吧:

API 可以返回簡(jiǎn)潔有用的數(shù)據(jù)
隨便點(diǎn)擊一個(gè)靶端,預(yù)覽圖片也很不錯(cuò)呢

下一步的工作

繼續(xù)發(fā)現(xiàn)和修補(bǔ)爬蟲(chóng)的bug
增加用戶系統(tǒng)和認(rèn)證機(jī)制谎势,這樣大家就可以收藏了
租一個(gè)云主機(jī)(求有需求的伙伴打賞)
編寫客戶端

公開(kāi)源代碼

github地址

最后,如果你對(duì)這個(gè)項(xiàng)目感興趣杨名,請(qǐng)發(fā)我簡(jiǎn)信脏榆,或者直接在下面評(píng)論!
還有台谍,服務(wù)器好貴须喂,真希望有人能打賞,讓我早點(diǎn)把API公開(kāi)典唇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镊折,一起剝皮案震驚了整個(gè)濱河市胯府,隨后出現(xiàn)的幾起案子介衔,更是在濱河造成了極大的恐慌,老刑警劉巖骂因,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炎咖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡寒波,警方通過(guò)查閱死者的電腦和手機(jī)乘盼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俄烁,“玉大人绸栅,你說(shuō)我怎么就攤上這事∫惩溃” “怎么了粹胯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)辰企。 經(jīng)常有香客問(wèn)我风纠,道長(zhǎng),這世上最難降的妖魔是什么牢贸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任竹观,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臭增。我一直安慰自己懂酱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布速址。 她就那樣靜靜地躺著玩焰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芍锚。 梳的紋絲不亂的頭發(fā)上昔园,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音并炮,去河邊找鬼默刚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逃魄,可吹牛的內(nèi)容都是我干的荤西。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伍俘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邪锌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起癌瘾,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤觅丰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后妨退,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妇萄,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年咬荷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冠句。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幸乒,死狀恐怖懦底,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罕扎,我是刑警寧澤聚唐,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站壳影,受9級(jí)特大地震影響拱层,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宴咧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一根灯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦烙肺、人聲如沸纳猪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)氏堤。三九已至,卻和暖如春搏明,著一層夾襖步出監(jiān)牢的瞬間鼠锈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工星著, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留购笆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓虚循,卻偏偏與公主長(zhǎng)得像同欠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子横缔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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