利用爬蟲技術能做到哪些很酷很有趣很有用的事情?

準備學習python爬蟲。各位大神都會用爬蟲做哪些有趣的事情?

今天突然想玩玩爬蟲,就提了這個問題。跟著YouTube上的一個tutor寫了個簡單的程序,爬了一點豆瓣的數據。主要用到request和bs4(BeautifulSoup)模塊。雖然簡陋,畢竟是人生中的第一隻爬蟲啊……以示紀念,代碼寫在博客里了:我的第一隻爬蟲:爬取豆瓣讀書


謝邀.

2011年夏天我在google實習的時候做了一些Twitter數據相關的開發,之後我看到了一片關於利用twitter上人的心情來預測股市的論文(http://battleofthequants.net/wp-content/uploads/2013/03/2010-10-15_JOCS_Twitter_Mood.pdf)。實習結束後我跟幾個朋友聊了聊,我就想能不能自己做一點twitter的數據挖掘,當時只是想先寫個爬蟲玩玩,沒想最後開發了兩年多,抓取了一千多萬用戶的400億條tweet。

ullet 分析篇
先給大家看一些分析結果吧。大家幾點睡覺呢? 我們來統計一下sleep這個詞在twitter上出現的頻率。

看來很多人喜歡在睡前會說一聲我睡了。那我們再看一個更有意思的 :"Thursday"這個詞的每天出現的頻率。

這裡2月2號是周四,不出意料,這一天提到周四的頻率最高。而且好像離周四越近這個頻率越高。可是,為什麼2月1號的頻率反而低了呢?是因為2月1號大家不說周四而說明天了(有的人會說2月2號也可以說是今天,但是因為在2月2號提到當天的次數太高,因此還是有很多人用周四這個詞)。

做了詞頻統計我們還可以做一些語義分析。我們可以利用unsupervised learning來分析一條tweet的感情色彩。我們對每一條tweet的高興程度在0至1之間打分,並對每天做平均值,就得到了下面這張圖。這裡最明顯的特徵恐怕就是周期性了。是的,大家普遍周末比較高興。不過這張圖的開始和中間有兩個點與周期不吻合。如果我告訴你這兩天是1月1日和2月14日,那你肯定會想到為什麼了,元旦和情人節很多人是很高興的(不排除slient majority存在的可能)。

這很有意思,但似乎沒什麼用啊。那我們來看下面這張圖,還是2012年的情感分析,不過這裡對用戶進行了過濾,只保留了來自投資人和交易員的tweet (根據用戶的tweet我們可以估計他/她的職業)。藍線是這些用戶的感情色彩,紅線是SP 500指數。看來行情好的時候大家都高興啊。

最後我們再來看兩個統計圖吧。2012年是美國大選年,這裡統計了在所有和奧巴馬相關的tweet里跟提到經濟的tweet占的比例。紅線是這個比例,黑線是SP 500

貌似和美國經濟有負相關性啊!為什麼呢,我們看下面的圖就明白了。這個比例和美國失業率正相關,而經濟和失業率又是負相關的。換句話說,美國人(尤其是共和黨的)找不到工作了就開始埋怨奧巴馬了。

除了上面的分析外我做了很多其他的研究,比如如何判斷一個用戶的職業,驗證六度分隔理論, 以及網路擴張速度的建模,不過這裡就先不贅述了。

最後要說的是以上的分析在統計上都是不嚴謹的,twitter上的信息雜音非常大,又有很強的demographic bias,有很多因素都沒有考慮。我們只能希望大數定律能過彌補一些誤差。寫在這裡只是拋磚引玉,給大家看一下爬蟲可以做什麼。大家感興趣的話之後我可以補充一下這兩個話題:
1. 怎樣判斷一條tweet的感情色彩
2. 怎樣估計一個twitter用戶的職業

ullet 技術篇
當時Twitter用戶大概已經有上億了,每天新的tweet也有幾千萬甚至上億。能不能把這些數據全部抓取下來呢?這是可能的。Twitter是有API的,不過每個IP地址每小時可以抓取150個用戶最近的tweet,以這個速度要把幾億個用戶抓取一遍需要近一百年。但是,大部分Twitter用戶是不活躍甚至從來不發tweet的,還有很多用戶是印尼等國家(不是他們不重要,我真的看不懂他們發的tweet),如果我們把不說英語,不發tweet以及follow人數不超過5個(好像註冊twitter後用戶會被要求follow 5個人)的用戶過濾掉,我們就剩下了大約10,000,000個用戶,十年就可以搞定了。

十年好像還是太長了。。。不過twitter的訪問限制是基於IP地址的,只要我從多個IP訪問twitter不久好了(我真的沒有DDOS twitter的意思啊)?那麼下一步就是搜集大量代理伺服器來訪問twitter api。為了做twitter的爬蟲我專門做了一個爬蟲去搜集免費代理伺服器。免費的東西總是有代價的,這些伺服器非常不穩定。因此我又建立了一套代理伺服器管理系統,定期更新IP地址,刪除不能用的伺服器。最後這套系統平均每天有幾百個可用的伺服器,大約半個月就可以把一千萬個用戶抓取一遍了。

此外我又做了一些動態優化,根據twitter用戶的follower數量決定他們的抓取頻率,以提高重要用戶tweet的實時性。

在一年半的時間裡,這套系統一共抓取了400億條tweet,加起來得有10TB,估計占來自美國tweet數量的一半左右。那麼問題來了,怎麼存貯這些tweet呢?如果要做分析的話恐怕把數據讀一遍就要好幾天了。很多人馬上會說hadoop, cassandra, spark等等。不過作為一個窮學生我哪裡有錢去做一個cluster呢?這些數據存在AWS上就得每月1000刀了。

自己動手,豐衣足食。解決方案就是自己組裝一個伺服器,買了8塊3T硬碟做了一個12TB的磁碟矩陣放在寢室里。

軟體使用了最為傳統的MySQL,這是一個存了400億條數據的MySQL資料庫。我花了大量時間去做優化,嘗試了各種各樣的partition, ordering, indexing。最後可以實現一天之內對100-200億條數據進行線型搜索或過濾,或者幾秒鐘內調取某一天的或某一條tweet。

這台伺服器現在留在了MIT,畢業後我把它提供給了一位教授做研究。

PS:
這個項目在2013年停止了,因為social media已經不在火,而且twitter於2013年中關閉了相關的API介面。
這個項目的初衷是學術性質的,我不想違反twitter的服務條款,因此這些數據沒有被出售或者用來謀求商業價值,而是留給了MIT做研究。
在這期間與幾個朋友進行了很愉快的合作,未徵得他們允許就不在此提名了。
暫時沒有開源的打算,因為當時水平有限,代碼寫得太丑了(用java寫的)。

PS2:
很多人問怎麼找代理伺服器,請大家google一下吧。當然如果不能翻牆的話有代理伺服器恐怕也不能用。

謝絕轉載。


我當初是看到這個帖子才知道Python這門語言的功能,才開始去學的,現在也學了一小段時間。不得不說,Python爬蟲對於我來說真是個神器。之前在分析一些經濟數據的時候,需要從網上抓取一些數據下來,想了很多方法,一開始是通過Excel,但是Excel只能爬下表格,局限性太大了。之後問了學編程的朋友,他說JavaScript也能實現,於是懵懵懂懂地就去學Java(我那朋友是學Java的,我當時問他用Java能不能實現,他說JavaScript好像可以,當時我什麼都不懂,就把JavaScript理解成是Java下的一個分支,以為JavaScript只是Java其中一個包什麼的,於是我便去學了一小會Java,無知惹的禍啊。。。)。但整個Java體系也太龐大了,學起來力不從心,畢竟我只是要運用其中一部分功能而已,於是學沒多久我就放棄了。就在我迷茫的時候,我發現了Python大法……

廢話說多了,說說自己的學習經歷吧。也給想學Python,想寫爬蟲的人一個參考。
一開始我是在網易雲課堂上自己找了個基礎的視頻來學,Python是真是門簡單的語言,之前懂一點Visual Basic,感覺Python也很適合給無編程基礎的人學習。
入門視頻到最後,就做出了我的第一個爬蟲——百度貼吧圖片爬蟲(相信很多的教程都是以百度貼吧爬蟲為經典例子來說的。)

一開始代碼很簡單,只能爬取第一頁的數據,於是我加了一個循環,就能夠爬取制定頁數的圖片了。並且圖片是有按順序排列的,非常方便。在篩選網址的時候用正則表達式就好了。正則表達式使用:[精華] 正則表達式30分鐘入門教程

可是我不經常混貼吧啊,也很少有要下載貼吧圖片的需求。回歸初衷吧。我對投資有興趣,學編程有一個原因也是為了投資服務。在7月股災進行時的時候,我錯過了一個明顯的「撿錢」的機會,並非自身專業知識不夠,而是當時在準備考試,很少去看股市,這讓我心有不甘:要是有個東西能夠幫我自動爬取數據分析並推送就好了,於是有了以下學習軌跡:

一、爬取數據
在此順便貼上一個Python系列教程http://www.jikexueyuan.com/path/python/,極客學院,裡面有些教程還是挺不錯的。從裡面我知道了兩個可以替代Python里urllib和re正則表達式的庫,它們分別叫做requests和lxml。

第一個庫挺不錯的,現在在獲取網頁源代碼時,我都用這個庫,大家如果有不懂的可以看看那個網站。第二個庫由於我是用3.4版本的Python,折騰了很久沒折騰進去,於是我發現了另一個不錯的庫BeautifulSoup,詳細教程參考:Python爬蟲入門八之Beautiful Soup的用法

有了requests和Beautifulsoup,基本上可以實現我想要的很多功能了。我便做了一個抓取分級基金數據的爬蟲:

二、分析並推送
其實在此分析其實還談不上,頂多算是篩選。(不過我相信隨著我數學能力提升會能有進一步的分析的,美好的祝願。。。)篩選很簡單,就是漲幅或收益率等等滿足一定條件就保留下來,保留下來幹嘛?推送啊!!!

將保存下來的數據通過郵件發送到自己的郵箱,手機上下載個軟體,一切就大功告成了!

至此當時學習Python的目的就達到了,當時雞凍地要炸了!!!

不過……那麼好玩的東西,怎麼能這麼快就結束了?再折騰吧!於是

三、簡單的界面
等等!Python好像不能直接弄成exe可執行文件,不能每次運行都開Python的窗口啊!強迫症怎麼能忍!上網搜搜發現有諸如py2exe的包可以轉換,可是老子是3.4版本啊!折騰半天沒搞定,算了!我不是會點VB嗎,用那個吧。於是連界面都有了

剛好會點PS,做做低級的界面也不錯。

四、雲伺服器
做完界面我以為就結束了,我還是too young啊。用了幾天發現,我總不能天天開著電腦讓它就運行那麼幾個程序吧?總得有個地方能讓我24小時運行這些程序。本來想跟朋友的電腦輪流運行,還是太麻煩。偶然的機會我發現了雲伺服器這個東西。了解後砸下重金買下伺服器(其實一個月30而已……)

折騰一番linux系統的操作,實現了24小時的實時推送。

而到這裡,我已經深陷到Python里了,我覺得我應該繼續學習這門強大簡單的語言,在知乎上看到了一個問題:Quant 應該學習哪些 Python 知識? - 薛昆Kelvin 的回答,雖然說的是Quant但也為我指引了一些方向。目前正準備學習numpy,pandas,matplotlib這些庫,以實現未來對金融、經濟數據的可視化和分析。相關的內容有一本書寫得還不錯,叫《利用Python進行數據分析》,有興趣學習可以讀一讀。

共勉。

—————————2015.9.23更新—————————

好多人問是什麼伺服器,我用的是阿里雲。有些人反應價格很高,其實把配置調到最低,可以滿足基本需求,價格只要30左右。

正好剛剛收到一封郵件,學生黨有福利了

(我真的不是在打廣告啊……)

—————————2015.10.2更新—————————
快破千贊了,有點出乎意料,補充幾點吧。

1.我用阿里雲發現最低的也要100/80/40(各種價格),答主你不是在騙我吧?

直接上圖,32元左右。

其實國內的伺服器有挺多的,一個月三四十的低配很多地方都買得到。不過評論區有人提到一些外國個人的雲伺服器價格有些在30~50/年,很便宜。答主暫時還沒去看,因為買的伺服器還沒過期,有需要的可以翻翻評論區看看。
(另外,亞馬遜好像有免費一年的雲伺服器試用。)

2.Python3也可以轉成exe
我只是按照自己的學習軌跡寫的回答,當初是在不知道雲伺服器的情況下才有轉化成exe的需求,並且當時了解得不多,屢屢碰壁沒能完成。現在已經不需要了,不過還是謝謝大家的提醒。

這裡順便提醒一下,各位初學Python務必裝入pip,不要像我一樣怕麻煩,結果導致一些庫花了好長時間才折騰進去,其實只要「pip install XXX」就很輕鬆搞定了。

3.從哪裡爬來的數據?
見另一個回答:
有哪些網站用爬蟲爬取能得到很有價值的數據? - 林駿翔的回答


該輪到我祭出我當年研究生期間在實驗室里參與或旁觀的各種有用或者有趣的課題了:


1. 建立機器翻譯的語料庫。

這是我研究生期間的核心課題,我先來介紹下背景。

大家其實都用過谷歌翻譯、百度翻譯,雖然確實槽點很多,但不妨礙機器翻譯相較過去已經達到基本可用的程度了。

我大概說下機器翻譯的原理。

在幾十年前,計算機學家們的思路是,既然是人工智慧的範疇,就讓計算機懂得語法規則、知道詞語含義,跟小孩子上學時學習的語言課程一樣去做訓練,就應該可以了。

但結果是,基於語義和語法規則的機器翻譯效果糟糕得一塌糊塗。

究其原因,還是每個詞語的含義實在太多、每句話的語境不同意思也會不同,更別說不同語言中要表達清楚同一個意思的方式也完全不同。

比如下圖這個,你覺得英語國家的人能看懂嗎:

其實,當時也有另一派,叫做統計派。他們認為,就跟當年戰勝國際象棋世界冠軍的「深藍(深藍(美國國際象棋電腦))」一樣,應當用統計的方式去做。大家知道,「深藍」並沒有領會象棋的下法,而只是熟悉幾百萬的棋局,懂得怎樣走從概率上看起來是最正確的。

機器翻譯也是這樣,完全可以輸入人工翻譯的大量語料,然後做出統計模型,讓計算機儘可能地熟悉別人是怎麼翻譯的,從而耳濡目染,也能「假裝」可以翻譯了。

但那個年代並沒有條件收集大量語料信息。後來很多年後,谷歌出現了,隨之出現的還有它的超大數據規模和超強的計算能力,於是谷歌的統計機器翻譯系統也就是全球正確率最高的系統之一了。而目前你所用過的、見到的機器翻譯工具,全都是用的統計方法。

故事大概就是這樣。目前學術界的機器翻譯方法中,統計機器翻譯基本是壟斷的地位。而效果的好壞,則基本就看語料庫的規模。(想了解更多,推薦閱讀 數學之美 (豆瓣) 的第2章「『自然語言處理 — 從規則到統計」及第3章「統計語言模型」)

所以你知道了,我的任務就是跟同學做一個爬蟲和簡易的分析系統,從而建立一個大規模的語料庫。

網上雙語的資源還是挺多的,大都像這種:

我們的爬取步驟大概是:
1. 對當前網頁進行簡易判斷,如果有雙語嫌疑,則收錄整理出來雙語的正文;如果沒有,棄用;
2. 將正文內容進行詳細判斷,確定是雙語文本,則進行段落對齊和句子對齊,整理到語料庫;如果沒有,棄用;
3. 對當前網頁的所有鏈接網頁,重複步驟 1

有詳細介紹的我們申請的專利在這裡:http://www.soopat.com/Patent/201210442487

其實我們當時的雙語判斷演算法和對齊演算法這些都不是難點,難點在機器配置、爬蟲設計和伺服器維護上。我們幾乎天天流竄在機房(配置機器、接線、裝機)、實驗室(編寫、運行代碼)、網路中心(跪求帶寬)、學校物業(空調他媽又壞了)這幾個地方,總是沒法消停。

最痛苦的是,假期里回家遠程訪問下爬蟲,發現 down 機了... 整個假期的寶貴時間就浪費了。

這是我們當時在又悶又熱又吵的機房的照片:

好在最後我們終於爬到了要求的語料規模,並且通過了國家項目的驗收。現在這些包括中英俄日的龐大語料正在百度翻譯中起到重要的作用,如果你用過百度翻譯,不妨給我點個感謝 ^_^

如果你對機器翻譯感興趣,也可以自己爬點雙語語料,做個翻譯器玩玩。這是一個極其簡易的搭建教程:機器翻譯系統的搭建。可以用它介紹的 1500 句對,也可以自己多爬一些。搭建好之後,你輸入一句話,看到機器像模像樣地回一句半生不熟的翻譯,還是有可能會被萌到的。

當然,要是你希望像我們一樣搭建千萬級甚至億級的語料庫,並且做一個翻譯器,那你需要有特彆強大計算能力和存儲能力的伺服器、非常寬的帶寬,以及強大的耐心和毅力...


2. 社會計算方面的統計和預測

很多朋友已經提到了可以通過爬蟲得到的數據做一些社會計算的分析。我們實驗室爬取了大規模的新浪微博內容數據(可能是非商用機構中最多的),並針對這些數據做了很多有趣的嘗試。

2.1 情緒地圖

@Emily L 提到了著名的根據情緒預測股市的論文:http://battleofthequants.net/wp-content/uploads/2013/03/2010-10-15_JOCS_Twitter_Mood.pdf 。其實我們也仿照做了國內的,不過沒有預測,只是監測目前微博上大家的情緒,也是極有趣的。

我們把情緒類型分為「喜悅」「憤怒」「悲傷」「恐懼」「驚奇」,並且對能體現情緒的詞語進行權重的標記,從而給每天每個省份都計算出一個情緒指數。

界面大概是這樣:

可以直觀看到全國各省份的情緒。不過實際上我感覺省份的區別不明顯,最明顯的是每天全國情緒指數的變動。

比如春節是 2 月 18 日,那天的情緒指數是 41.27,前一天是 33.04,後一天則是 39.66。跟除夕夜都在吐槽和抱怨春晚,而大年初一則都在拜年情緒高漲,初二有所回落這樣的狀況預估是一致的。

比如今年 1 月 2 日,上海踩踏事故開始登上各大媒體頭條,成了熱點話題,整個微博的情緒指數就驟降到 33.99 。

再比如 5 月份情緒指數最高的是 5·20,因為今年開始流行示愛和表白;其次就是五一假期那幾天。同樣跟現實狀況的預估是一致的。

訪問地址:http://123.126.42.100:5929/flexweb/index.html


2.2 飲食地圖

我們抽取出所有美食相關詞語,然後基於大家提到的美食次數,做了這麼一份飲食地圖。你可以查看不同省份、不同性別的用戶、不同的時間段對不同類別食物的關注程度。

比如你可以看到廣東整體的美食關註:

還可以把男的排除掉,只看女的:

還可以具體到,看廣東女性每天早上會提到什麼喝的

訪問地址:微博用戶飲食習慣分析


2.3 票房預測

這是我們實驗室最大膽的嘗試,希望利用微博上大家表現出來的,對某部電影的期待值和關注度,來預測其票房。

細節就不介紹了,目前對某些電影的預測比較准,某些則差很多。因為顯然,很多電影是大家不用說也會默默買票,而很多電影是大家樂於討論但不願出錢到電影院去看的。

界面是這樣的:

訪問地址:電影票房預測-SCIR

最後貼上我們實驗室的官方網站:哈爾濱工業大學社會計算與信息檢索研究中心


3. 寫在後面

現在國內的社交平台(微博、豆瓣、知乎)已經積累了很多信息,在上面可分析的事情太多啦。大到政府部門需要的輿情監控,小到可以看看喜歡的姑娘最近情緒如何。

其中有些會特別有價值,比如一些重要的預測(股市預測、票房預測),真的做成了的話商業價值根本不可估量;還有些會特別有趣,比如看看 5·20 的時候大家最愛說的情話是什麼,看看我跟李開復之間最近的關係鏈是什麼。

說到這,我突然很想做個知乎的分析。

在內容方面,比如看看全知乎的文字里最常出現的人名到底是 @張佳瑋還是 @梁邊妖;比如看看政治或者歷史話題下,以表達情緒的詞作為依據,大家的正能量多還是負能量多;比如看看當大家提到哪些東西時,情緒會最激動(中醫?老羅?穆斯林?)。

在關係方面,比如看看我的朋友、傳說中認識所有知乎女 V 的誰誰誰到底還有哪個女 V 沒有關注;比如看看知乎有哪些社交達人,雖然沒多少贊但關係鏈卻在大 V 們中間;比如看看有沒有關注了我同時還被 @朱炫 關注的,這樣我可以托他給我介紹大師兄。

有沒有人一起來嗨?讓我看到你的手!


可以帶逛呀!

爬了知乎12萬用戶的頭像,把長得像的頭像放在一起,方便瀏覽:http://lab.grapeot.me/zhihu/touxiang/bai-yuan-yuan-73.html

然後搜集了知友們的點擊,預測出來這是你們(平均)最喜歡的人長的樣子:

然後根據點擊數據訓練出來了一個帶逛機器人,可以自動識別美女:

http://lab.grapeot.me/zhihu/autoface

更詳細的信息可以參見我的專欄文章:

帶逛傳萬世 因有我參與 - 挖掘知乎里有趣的東西 - 知乎專欄

你們最愛的知乎頭像 - 挖掘知乎里有趣的東西 - 知乎專欄

頭像帶逛 - 挖掘知乎里有趣的東西 - 知乎專欄


把學校所有重要的在線服務用爬蟲集合成了一套JSON API ,然後開發成了App,並且加了一個類似微信朋友圈的功能,可以說是校友圈吧。全校同學和同班同學都可以通過它互相交流,和微信不同的是,同班之間的交流會有消息推送。

App有iOS版和Android版,可以下載並查看教學文檔和習題文件,老師有新的通告也會發推送給同學們,還可以查看成績,課程表,考試時間,個人財務,校園新聞,出勤率等。

目前基本全校都在使用。 一個人開發了兩個月。App名字叫MMUBee
開發這個App,我一毛錢都沒賺,每年還賠進去四百多美元的開發者註冊費和VPS租用費。兩個月里也基本上起早貪黑的做。沒太多原因,就是喜歡做東西。

我不經常去上課,不過去的時候都可以看見大家在用MMUbee,有一次一個同學打開MMUbee然後對著我說,你快來下載MMUbee,It"s awesome!,我說這是我開發的,他沒反應過來,過了5秒鐘,一臉興奮的問我Are u kidding me?類似的事情還有很多,比如在上課的時候老師會說,大家不許把考試答案發在MMUbee里。
MMUbee的校友圈裡,前兩個月90%的Post都是好評。Twitter和Facebook上也都是同學們的一片叫好聲,校內論壇更是沸沸揚揚了一段時間。雖然MMUbee本身沒有盈利,卻給我帶來了很多機遇。

查看通告,下載課件,聯繫導師,點擊通告中的日期還可以直接創建提醒:

校內新聞:

校友圈(可以設置查看許可權為同班同學或者整個校區):

學生中心(時間表,出勤率,考試時間和成績等等):

用戶評價:


Python 開發交流群:113458033
---------------------------------------------------------------------------------

我的第一個爬蟲是看了教程上模仿寫的,區區十幾行代碼,也就是利用正則和urllib抓取貼吧上的圖片,而且沒有涉及到登錄,以及下一頁等,也就是為了批量下載一點美圖。
dung_beetle/get_tieba.py at master · ZhangHang-z/dung_beetle · GitHub

然後嘗試著更複雜一點的匹配,抓取豆瓣電影上新片榜, 口碑榜, 票房榜,也沒有涉及到登錄,複雜了全用正則就好像有點麻煩,也許我的水平不夠,這時我發現了BeautifulSoup這個庫。
dung_beetle/get_doubant.py at master · ZhangHang-z/dung_beetle · GitHub

我想試試登錄,就參考別人的代碼登錄豆瓣,但是urllib,urllib2不是那麼好用。。
dung_beetle/login_douban1.py at master · ZhangHang-z/dung_beetle · GitHub

所以我就用requests,簡直是一鍵安裝的效果。
dung_beetle/login_douban.py at master · ZhangHang-z/dung_beetle · GitHub

我作為新手一直喜歡用for循環一路走到底,但是循環的效率不怎麼樣,這時就開始嘗試學習多線程庫的使用了,一開始我想爬XX的,但是一直連接失敗,無奈隨便找了個論壇。原本如果用for循環需要100s, 多線程10s就好了。
dung_beetle/forum_crawler1.py at master · ZhangHang-z/dung_beetle · GitHub

這幾天我考慮寫稍大一點的東西,畢竟掌握一門語言的語法,庫的使用要靠不斷的寫,碰到各種問題,才知道怎麼解決。所以準備寫個爬取知乎的爬蟲,但是目前不盡人意。
ZhangHang-z/gzhihu · GitHub
效果:可把問題答案寫入文件,但除了文本外,無法處理圖片。


爬知乎的數據有一陣子了,酷不酷不好說,不過有趣倒是真的。

之前的幾個爬蟲相關的回答,都是無聊戲作:

  • 有哪些網站用爬蟲爬取能得到很有價值的數據? - 知乎用戶的回答
  • 長得好看,但沒有過男朋友是什麼體驗? - 知乎用戶的回答
  • 長得帥卻沒有女朋友是什麼體驗? - 知乎用戶的回答

這次的回答,同樣是閑著無聊來玩一玩。

1. 輪子哥動態分析

這次,以 @vczh 輪子哥為例。抓取截止到 2016-06-10 10:30 的所有知乎動態,共計 35517 條。各類別如下(部分類別與真實數據有少許出入):

可視化如圖:

將所有動態按照月份來進行統計,結果如下:

可以看到,最早的動態是在2011年7月份,然後一直沉寂,直到2013年7月份之後,開始日漸活躍。2011年7月份動態一共有六條,都是關注話題,這六個話題分別是:

  • 互聯網
  • 遊戲
  • 用戶體驗設計
  • 電影
  • 自然科學
  • 心理學

在輪子哥點贊的18940個回答中,除去匿名用戶,共有10133個獨立用戶。其中被輪子哥點贊次數最多的幾個用戶分別為:

  • @叛逆者 294次
  • @趙劼 220次
  • @Belleve 166次
  • @可可蘇瑪 160次
  • @Ivony 148次
  • @空明流轉 102次

然後對所有的動態進行時間段分析。不考慮夏令時,統一認為西雅圖時間與北京時間相差15個小時。取以下兩個時間段:

  • 北京時間17:00~21:00(西雅圖時間02:00~06:00),作為西雅圖夜間
  • 北京時間02:00~06:00(西雅圖時間11:00~15:00),作為北京夜間

統計結果如圖:

可以看到,動態數在2014年底的時候發生逆轉,輪子哥肉身翻牆莫非就在這個時候?

2. 特別關注

基於知乎用戶的動態信息抓取,還可以做其它事情。這裡舉個例子:比如,你關注了一個男神/女神,但是總是容易錯過ta的動態,怎麼辦呢?

一個簡單的做法就是,定期抓取該用戶的動態(比如5分鐘抓取一次),如果發現有新動態,就通過郵件或者其它方式來通知自己。

這裡只是一個想法,從理論和技術上都是完全可行。由於沒有特別關注的人,暫無代碼實現。當然,如果你要做,要考慮到這樣的行為有一定的監視嫌疑,是否會給人造成困擾。

3. 小彩蛋

看到有許多是抓取知乎用戶頭像的,當然,主要是姑娘的頭像。可是,在用戶個人主頁,頭像圖片比較小,許多都看不清楚。以 @玲瓏邪僧 為例,在個人信息頁,通過看源碼,你會發現:

頭像圖為

https://pic2.zhimg.com/2131c1a04b2c812326a042b52579dd29_l.jpg

這是一張100*100的圖。

然後你會發現一張2倍圖:

https://pic2.zhimg.com/2131c1a04b2c812326a042b52579dd29_xl.jpg

只是把 l 換成了 xl

有沒有 xxl,xxxl 圖呢?沒有!

那麼,如何看原始圖呢,把 l 換成 r (應該是raw的意思),即:

https://pic2.zhimg.com/2131c1a04b2c812326a042b52579dd29_r.jpg

這樣,就可以看到頭像原圖了 O(∩_∩)O~

如果你需要對不同size的圖像地址進行轉換,這裡有實現好的Node Module:GitHub - syaning/zhimg: Image src util for zhihu images.

4. 源碼

  • 爬蟲基於 GitHub - syaning/zhihu-api: Unofficial API for zhihu (求star o(╯□╰)o)
  • 爬蟲repo為 GitHub - syaning/zhihu-crawler: Crawlers for zhihu. (非通用實現,未封裝,暫時只圖自己方便)

5. 純屬閑扯淡,莫較真。


彩蛋:

彩蛋已關閉

騷瑞

為後來的同學解釋一下彩蛋怎麼回事,順便對昨晚12點之後收不到彩蛋的同學抱歉(鞠躬),被屏蔽了

  • 彩蛋是如果贊了這條答案會自動收到一條隨機的私信,裡面是一則短笑話
  • 笑話是在某網站上爬下來的,一共幾十條隨機發送

起因是昨天寫完原答案,突然想到如果加上彩蛋會不會很多人點贊(說我不是騙贊自己也不信)

於是寫了個小腳本,跑了起來試了一下

第一次高潮出現在回答完30分鐘後,突然多了一兩百的贊,由於私信發送時間間隔太短,掛掉了

修復後堅持到了晚上十二點,本機和VPS都不能再持續發送私信,於是停掉了

今早起來發現贊又多了3000,崩潰的我決定還是不接著發了。。。

代碼和邏輯如下:

// 代碼不全,只有主要的邏輯
// 用到的庫如下:

var request = require("superagent");
var cheerio = require("cheerio");
var fs = require("fs");

// 首先是這樣的一個介面,可以取到某個答案所有贊同的人數
// 每次取會返回10條數據,是編譯好的HTML模版,還有下一組數據的地址
// 遍歷這10條數據並取到所有人的ID即可
// config 是Cookie、Host、Referer等配置

var sourceLink = "https://www.zhihu.com/answer/" + code + "/voters_profile";

function getVoterList(link, fn) {
var next = "";
if (postListLength !sleepIng) {
console.log("waiting");
sleepIng = true;
return setTimeout(function () {
sleepIng = false;
sleep = 1;
getVoterList(link, fn);
}, 1000 * 60);
}
request.get(link)
.set(config)
.end(function (err, res) {
if (err || !res.ok) {
return console.log(err);
}
var result = JSON.parse(res.text), voterList = "", $;

if (result.paging result.paging.next) {
next = result.paging.next;
}

if (result.payload result.payload.length) {
voterList = result.payload.join("");
$ = cheerio.load(voterList);

$(".zm-rich-follow-btn").each(function () {
var id = $(this).attr("data-id");

if (voterIdList.indexOf(id) === -1 oldIdList.indexOf(id) === -1) {
console.log("new id: ", id);
voterIdList.push(id);
} else {
dupIdLen += 1;
}
});
}

if (next dupIdLen &< 20) { setTimeout(function () { getVoterList("https://www.zhihu.com" + next, fn); }, 3000); } else { dupIdLen = 0; fn(); } }); } // 在爬取完該介面後,新的點贊人數會暫存在數組中,遍歷該數組,並發送請求 // 如請求發送成功,將各ID保存在某一個文件中,如發送失敗,等幾分鐘後重試 function sendPost() { var hasError = false; var tempArr = []; postListLength = voterIdList.length; console.log("send post"); if (voterIdList.length) { voterIdList.forEach(function (id, i) { if (hasError) { // 處理髮送失敗的情況,等待5分鐘重試 if (!sleepIng) { console.log("waiting"); sleepIng = true; return setTimeout(function () { sleepIng = false; sleep = 1; sendPost(); }, 1000 * 60 * 5); } return console.log("has error"); } var index = (function () { return i; })(i); var postIndex = index &> postList.length ? index % postList.length : index;

setTimeout(function () {
// 一波發送完成之前不會啟動下一波私信發送
postListLength--;
request.post("https://www.zhihu.com/inbox/post")
.send({
member_id: id,
content: postList[postIndex],
token: "",
_xsrf: "" // 這裡是發送者的Cookie
})
.set(config)
.set({"Accept": "*/*"})
.set({"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"})
.end(function (err, res) {
console.log("hasError: ", hasError);
console.log(new Date());
console.log(res.text);
var resObj = {};

try {
resObj = JSON.parse(res.text);
} catch (e) {
console.log(e);

if (!sleepIng) {
hasError = true;
sleep = 5;
console.log("waiting");
sleepIng = true;
return setTimeout(function () {
sleepIng = false;
sleep = 1;
sendPost();
}, 1000 * 60 * 5);
}
}

if (err || !res.ok || resObj.r !== 0) {
console.log(err);
hasError = true;
sleep = 5;
tempArr = voterIdList.slice(0, index);
oldIdList = oldIdList.concat(tempArr);
fs.writeFile("./idlist.json", oldIdList, function (err) {
if (err) console.log(err);
});
}
});
}, 20 * 1000 * index * sleep);

if (index === voterIdList.length - 1) {
console.log("last");
oldIdList = oldIdList.concat(voterIdList);
voterIdList = [];
setTimeout(function () {
console.log("run again");
getVoterList(sourceLink, sendPost);
}, 1000 * 60 * 15);

fs.writeFile("./idlist.json", oldIdList, function (err) {
if (err) console.log(err);
});

console.log("done ");
}
});
} else {
setTimeout(function () {
console.log("run again");
getVoterList(sourceLink, sendPost);
}, 1000 * 60);
}
}

代碼花了半個小時寫的,比較糙,不過跑了一下確實能用,既然已經不發了就不改了,有同學要求就發上來了

PS 知乎的策略應該有變化,昨晚12點之前只要對同一個人兩條私信不重複,把握好發送時間間隔就沒問題,12點之後我的VPS已經不能用了,時間間隔再久也會返回500錯誤,1點後我的本機也不行了,不斷的返回500和403,Cookie也有更新,索性就停掉了

這是昨晚爬到的ID

還有我的視角所看的我的私信列表= =

就醬

==============================

某人有一天書荒了,想要看豆瓣上的高分書,然而豆瓣並沒有提供按評分的檢索,於是拜託我寫一個小東西,要求是能按現有標籤來分類檢索豆瓣圖書,並按分數從高到低排序

需求不難,就是數據沒有,於是寫了個爬蟲按標籤爬下來豆瓣所有的書

爬的時候只爬了分類的列表,這樣有書籍的名稱,鏈接,評分,分類,夠用了,而且一次請求可以拿到較多的數據,並發不高的情況下能較快的爬完豆瓣所有的書

爬數據的時間大概兩個多小時左右,每次請求間隔3秒,倒是沒被屏蔽

代碼用node寫的,包括外網訪問的伺服器,基本滿足了某人的需要,現在跑在我自己的VPS上,有域名可以直接訪問

爬完知道豆瓣熱門標籤下大概有6萬多本書,是會不斷更新的,所以還要定期爬一下更新一下數據

下面是預覽,時間所限頁面寫的糙了點,反正用戶就一個- -


用爬蟲最大的好處是批量且自動化得獲取和處理信息。對於宏觀或者微觀的情況都可以多一個側面去了解(不知道能不能幫統計局一些忙)。以下是我們自己用爬蟲獲得的信息然後做的呈現。
(多圖預警)

1、獲得各個機場的實時流量

2、獲得熱點城市的火車票情況

3、各種熱門公司招聘中的職位數及月薪分布

4、某公司的門店變化情況

5、對某一類金融產品的檢測和跟蹤

6、對某車型用戶數變化情況的跟蹤

7、對某個App的下載量跟蹤


額,這個研究本來是準備做個live,但是live團隊覺得政治敏感不讓做,那就貼在專欄裡面吧。
作者:江漢臣
鏈接:知乎專欄

提問在11月9日(北京時間)達到高峰

2016年6月份的回答高峰是由於奧蘭多槍擊案(也被歸到總統大選話題下)

特別感謝:7sDream的zhihu_oauth項目


防川:致力於提供社科研究大數據採集和分析諮詢服務。


我們用爬蟲爬遍整個網路空間,爬那些主流埠,這背後是各種服務,其中 Web 服務最為複雜。

我們把這些服務的響應內容儘可能存儲下來,加上大量指紋規則去識別它們都是什麼。

於是我們得到了「全球網路設備」情況:
http://www.zoomeye.org/statistic/device

由於 Web 服務的特殊性,我們還得到了「全球 Web 服務」情況:
http://www.zoomeye.org/statistic/web

當我們看到這個時,對整個網路空間充滿敬畏,於是內部的項目在 2013 年初考慮對外開放,首先開放了搜索:
http://zoomeye.org

取了個非常酷的名字:ZoomEye,中文叫:鍾馗之眼,定位為:網路空間搜索引擎。當前已經是第三版。

由於這種搜索方式非常專業(並非面向普通大眾),我們在首頁上提供了「用戶手冊」,還有「搜索 Dork」,用戶可以藉助這兩樣快速入門。

我們做這個的目的是什麼?

其實,我們是安全研究者(說通俗點:黑客),我們想解決一個問題:

一個漏洞爆發後,我們如何感知全球影響面?

這個問題背後的邏輯就是我們做這個搜索引擎的奧秘。

在黑客世界,攻擊者與防禦者,他們對抗的單元都可以細分到一個個「組件」,我們認為組件是構成網路空間的最小單元,比如你搭建一個網站,你要用 Ubuntu/PHP/MySQL/WordPress(附帶各種插件)/jQuery 等等等,這些玩意就是一個個組件,你不需要重複勞動去創造它們,而是選擇搭積木方式,這是整個網路空間進化的必然結果。正因為如此,如果一個組件出漏洞(這是必然的),那將影響一大批使用它的那些目標。

攻擊者喜歡這樣,因為一個組件出漏洞,攻擊者可以大規模黑掉目標,然後做各種壞事(龐大地下產業鏈的一個關鍵環節)。

對我們來說,其實我們是防禦者,我們可以站在攻擊者角度去評估這種影響面,然後發出預警。

我們最成功的案例是,2014/4/8 心臟出血漏洞爆發時,我們是最快搞定整個權威預警的團隊。可以看當時我們基於 ZoomEye 做出的心臟出血全球統計與一年後的相關解讀:
http://www.zoomeye.org/lab/heartbleed

http://www.zoomeye.org/lab/heartbleed/2015

當時,我們的結論覆蓋了央視、新華社、許多科技媒體、很多報刊雜誌,還有國家相關監管機構,2014 年底時,入選極客公園評審的 2014 年互聯網產品 50 強。這給了我們團隊極大的信心,從一個內部實驗性小項目逐漸成為安全圈/黑客圈炙手可熱的平台。

這是一件大工程,如果你仔細體驗這個平台,你會認可我的看法。

這是一個充滿爭議的平台,有人說我們通過 ZoomEye 就可以黑遍全世界。我們有能力做這事,但我們不會這樣做,黑遍有什麼好玩的,好玩在對抗,在促進整個網路空間的良性進化。

Google 爬了全球網站,他們說「不作惡」,對我們來說,全球網站只是我們面對龐大網路空間的一個子集(Google 的爬蟲複雜度比我們只面對組件的爬蟲的複雜度要高 N 個量級,這裡不展開),為了把這個平台做好,我們還需要大量的人才與伺服器、帶寬、錢。

這是我這麼多年帶隊做的最酷的爬蟲項目,如果你也是 Python 工程師,對黑客這個領域充滿好奇,可以私信我^_^


知乎爬蟲
使用卷積神經網路解決了目前知乎爬蟲模擬登錄時需要手動輸入驗證碼的問題
訓練兩個類VGG的卷積神經網路,分別實現驗證碼的切割與識別,查准率達到85%
具體介紹及代碼請見github 喜歡的可以打個星: )
https://github.com/moxiegushi/zhihu

==============================================================
感謝大家的關注,很多朋友問到數據成本和訓練模型的問題,特來更新下:
1.數據標記的成本
從網站爬下驗證碼數據後,滑框切割,然後手動標註一小部分樣本,剩餘的通過對圖片進行小幅度的旋轉,扭曲,變形,來生成大量有標籤樣本,opencv什麼的都可以實現,並且keras框架也有數據提升的函數,很好用: ) 具體參考keras的中文文檔
2.訓練模型已上傳至github ---------SVGG.py 如果對你有幫助的話順手幫我打個星吧: )
我也是新手,大家共同進步(近期趕論文,暫時不更新了)

初次嘗試代碼寫的爛,輕噴
===============================================================
閑來無事更新下細節
1.卷積神經網路(CNN)
CNN受圖片像素性質相似的啟發,通過原始圖片與多通道卷積核的卷積運算提取初級特徵,由於參數的共享使得訓練參數的數量大幅度降低(數百倍),經由多次卷積與採樣,最後的全連接層用於實現分類。

典型的CNN(LENET)結構如圖所示:
C1:卷基層,原始圖像與6個5X5的卷積核進行卷積得到六通道的特徵圖
C2:採樣層,使用2X2的步長進行採樣,進一步減少參數,壓縮特徵
C3:第二次卷積
C4:第二次採樣
最後經由全連接層分類本次嘗試使用小型VGG結構,由於驗證碼圖片較小,VGG的運算量也不會很大,不影響實現
具體結構為(由於圖片樣本較小,所以卷積核特特徵通道數較小):
--------conv 3X3, 4通道---------卷基層
--------conv 3X3, 4通道---------卷基層
--------pool 2X2--------------------採樣層
--------conv 3X3, 8通道---------卷基層
--------conv 3X3, 8通道---------卷基層
--------pool 2X2--------------------採樣層
--------64神經元-------------------全連接隱藏層
--------16神經元-------------------全連接隱藏層
--------分類--------------------------全連接輸出層
訓練好的網路權重和網路模型分別保存在model.h5和model.h5中可直接讀取,無需自己訓練(均已上傳至github)
windows下需要將路徑格式改一下
代碼如下(寫的很爛)

模型部分已更新


這是我們跟某大數據公司的合作的一個研究...(由於暫時沒有徵求對方的同意,所以暫時不方便披露)並且代碼和數據都可以在我們的雲端產品使用:【滾雪球】雪球滾起來吧,到底我們是否能靠輿情事件賺錢呢?

有一天聊到他們爬了很多很多的數據,而我們是專註在看二級市場的量化研究和交易,提供了回測和模擬交易,那麼爬下來的大數據如何可以在二級市場變現呢?我們不就是一個很好的合作嗎?拿到數據,理清思路,進行結構化將無規則的數據進行量化 - 規則化,提供易用的Python API,好,策略研究員們可以嘗試了 - 只需要證明收益、風險都相對客觀,經過模擬實盤、小部分投入資金驗證即可了。

廢話少說,開講故事...

最早是這家拿到了很多很多的亂七八糟的股票相關的輿情數據,那麼到底哪些是比較重要的呢?因為拿到的文本數據是非常非常大的...

一個符合邏輯的思路是:我們根據關注者數據進行每日選股,一方面考慮新增的關注者數量,同時也考慮關注者的增長率,即新增關注者與總關注者的比例,對這一數值進行排序,進行每日的選股調倉。然後測試這一次選出的10個股票,看看他們這一周的表現,結果比較一般,證明輿情數據對於當日表現的作用明顯,應當每日調倉。

因此從中構建了幾組數據,包括:

1. 某股票昨日新增評論

2. 某股票總評論

3. 某股票昨日新增關注者

4. 某股票總關注者數目

5. 某股票賣出行為(不太准優化中)

6. 某股票買入行為(不太准優化中)

那麼對於5,6的構建,我們考慮到興許應該只考慮大V效應,即社區前5%的大V的調倉記錄 - 剔除掉非大V用戶即剔除了更多的噪音。這也是雪球100 paper中的選擇標準:

OK,經過了一系列的洗洗刷刷以後數據clean ready,根據上面的邏輯思想進行嘗試運行策略。

-------------------最初的結果-----------------------

曾經我們以為我們在做的一個量化策略發現了真正的交易聖杯...

團隊非常開心:也不用在給大家發工資了,年初的時候給大家發第一個月的工資,然後這一年讓大家早上九點半開始交易半小時,根據我們這個策略的信號機械執行就行了...然後就能獲得下圖的1500%的年化收益率,有著12的Sharpe的一個策略...這意味著什麼呢?如果年初我們給一個員工1萬的工資,年尾他這一萬塊就變成了15萬,比平均每個月工資還多,那我們就不發工資了唄...

初始的10萬資金在回測的結尾不到一年時間變成了118萬+

當時我們真的很開心,團隊大家都覺得「嗯,老闆你發一個月工資給我們+這個策略我們就可以今年不要工資啦!」

雪球就可以滾起來啦...

漲停、跌停的問題

雖然該策略沒有考慮到停牌股票的操作(Ricequant已經處理了),不過再深入研究以後我們發現,有些股票輿情熱門那麼往往也不容易買入、賣出啊 - 因為受到了漲、跌停影響,隨後我們改進了策略,剔除掉了這些漲跌停無法買入的股票,結果就變成了這樣...

這樣子「改良」之後,仔細驗證了落單的股票都不存在當天漲停、跌停或者交易量不夠的情況,但是收益急劇下降到了242%的年化收益率。不過至少還是有6.7的Sharpe,well,雖然不能財務自由了,但是投入點錢每年這麼賺還是能做高富帥的,想想也還開心。。。

未來數據?

接著有一天我們內部在討論,假如一個並不難的「大數據爬蟲」策略可以獲得如此顯著的Sharpe,那麼為什麼不會有很多基金base on輿情策略直接賺錢不就好了,來錢不是很容易嗎?我們也覺得想繼續深挖,那麼問題來了...

後來發現,我們在回測當天調用的股票輿情數據其實是第二天早上7點才生成的,那麼意味著在當天早上我們就知道了隨後這一整天的股票輿情走向了!

神馬?!∑q|?Д?|p 當時的表情是這樣的...莫非註定屌絲依然是屌絲了嗎!

戰戰兢兢地修改完代碼,讓輿情數據調用的API只能調用到昨天的數據,結果出來了...

年化收益率現在變成了56.7%,伴隨著18%的最大回撤,只能說還行吧,雖然依然大幅度戰勝了大盤!

well...還是繼續回頭老老實實寫代碼挖礦吧...可見一個聖杯不會這麼容易地出現的...


巴菲特你好,巴菲特再見!


數據是非常有意思的,從中可以發現的確輿情是和股票有正相關的,而讓我們設想數據爬取的速度如果達到了秒甚至毫秒級別一次更新,那麼會讓這個收益更加提高(我們測試了每天和幾天甚至一個月的調倉效果都會比較差),是的。。。爬蟲也需要更快更強


而我們想要做的更有趣的事情包括看京東、淘寶等銷售數據是提前於財報發布的,並且更加真實,上面更有超過100家的上市公司在做生意,還有諸如好評的增加減少也是一個因子,敬請期待。


當大數據配合合適的工具,我們相信會有更有意思的事情發生,不過還是要提示:

股市有風險,入市需謹慎

股市有風險,入市需謹慎

股市有風險,入市需謹慎


重要的話說三遍...僅代表本人的測試看法,不代表Ricequant也不建議不理解的情況下跟隨投資。


也歡迎大家關注專欄 : Money Code - http://zhuanlan.zhihu.com/ricequant

也會時不時更新有趣的策略和想法


所有的提到的數據都可以在 http://www.ricequant.com 上自己嘗試,是完全免費的雲端工具


沒想到得到這麼多贊,有點小害怕啊~有一些問題我在下面回答以下把。
------------------------------------------------正常分割線----------------------------------------------------
2011年,我還在學校讀書,寫了個軟體註冊了幾十萬個新浪微博賬號。(那時候還不要求實名制,真懷念)。然後就要養賬號,寫了幾個爬蟲軟體從搜狐微博上爬昵稱用來更新我新浪微博上的昵稱,從大V的粉絲中爬他們的頭像用來更新自己的微博頭像(我對不起大家!),從笑話微博中爬微博內容來發到自己微博中。用這這幾十萬個微博賬號去參與抽獎,一年獲利了七萬多塊錢。讀書那幾年我承包了我們宿舍所有的水電費和我們班男生宵夜啤酒鴨霸王的費用。
------------------------------------------問題回答--------------------------------------------------------------
1、是不是用Python寫的,用別的語言可以實現不啦?
答:是用C#寫的,Python沒有學過,畢竟專業不是計算機,畢業後所從事的工作也不是程序員,所以沒有學習這個的動力。別的語言肯定也是可以實現的,計算機語言之間都有相似性,只是實現起來的難易程度不一樣。上學時學習C#完全是出於愛好,在學習、工作上能夠解決自己的問題即可。我不適合專職做程序員,去理解別人的需求很痛苦,其實曾經嘗試著去當一名偉大的軟體程序員來著,可惜北漂未遂。
2、怎麼知道你的帳號中獎了?
答:我自己的帳號我一眼就能認得出來。我一般用一個大號去參加抽獎(大號一般不會被封),然後用軟體去監測我的大號參與抽獎。這樣我的小號轉發的有獎活動跟我的大號之間就幾乎相同了(為什麼說幾乎,因為有部分會失敗)。活動開獎後,我只要從我的大號中進入抽獎頁面查看中獎帳號即可。我自己的帳號全部申請了10個左右的勳章,有昵稱、有頭像、有學校、有年齡、有標籤,最重要的是從所轉發的微博和抽獎活動來看,一個有獎活動中間夾雜幾個正常微博,正常微博的內容我是從誰的微博中抓取的我也都能認識。只要疑似自己的帳號,把它的UID或者nickname放入數據中中檢索便知結果。
3、新浪微博不封號?
答:肯定封,而且經常好幾千上萬那樣封。所以我一次性都是用一萬個左右的帳號去參加抽獎,封掉了就用下一批。此外換IP是常識,之前十個左右換一個IP,後來嚴格了,基本上三五個就換一次IP。封號和反封號跟新浪也是鬥智斗勇,每次帳號被封之後我都會把同一批使用但倖存的那麼幾百個帳號來進行分析。同批次參與活動為什麼大部分帳號被封,但是還有幾百個倖存的呢,他們之間肯定是有差異的,找到這種差異去猜測新浪技術然後改進我的軟體。
4、現在還做不做這方面的軟體了,不做可惜了,能不能幫我寫個某某軟體,批量生成一些知乎點贊帳號和點贊軟體?
答:現在不做,從來都沒有想過把這個當作所謂的事業。現在有了正經工作,而且收入也比做這個要多,為什麼還要去做這種邊緣性的東西。
5、鴨霸王是什麼?
答:下酒菜,湖南特色,辣的夠滋味,畢業了懷念。
6、碉堡?
答:會很疼,還是不要。


最新更新:本爬蟲已開源,路過的幫我點個Star/Fork就最好了 https://github.com/MorganZhang100/zhihu-spider

Latest Update
抱歉各位親,知乎Hot已經不再維護了。

Update 2015.1.21
自己使用了8天,算了一下,得贊效率是之前的21倍,大概還是有些用的。

Update 2015.1.19
今天把篩選演算法更新了一下,給出的推薦更有參考意義了,大家有興趣的可以去試一下~

評論中有人問篩選會火的問題的依據是什麼。目前我只考慮了如下幾個變數:
關注人數(決定了答案的曝光量)
已有答案數(決定了競爭強度)
已有答案的最高票答案票數(決定了競爭強度)
根據這三個變數,我可以找出曝光量大的,競爭強度低的問題來回答,從而更容易得贊。
如果大家有更好的點子,請不吝賜教~~~
----------------

前幾天邊學python邊寫了一個爬蟲用來爬知乎問題,從中篩選出可能會火的問題,目前爬了一百多萬個問題了,從中選了500個可能會火的放在了知乎Hot上,網址是http://ZhihuHot.sinaapp.com。

自己試用了下,感覺還是有一點意思的,目前的演算法沒考慮太多細節,如果除了我還有人喜歡的話我就再改進好了。話說知乎的問題真多啊,我的資料庫大小正在以肉眼可見的速度不斷上漲。本來還想給爬蟲加上多線程功能的,後來想想如果加了的話沒兩天我就沒有硬碟空間可用了。

給自己的另外一個小工具打個廣告
程序員們是如何計算自己寫了多少行代碼的? - 張方舟的回答
https://github.com/MorganZhang100/line-counter


用 Android QQ 來監視某人的出行及作息規律

去年暑假做的事情,首發於 https://www.v2ex.com/t/121272 我就不整理了,直接貼過來,以下原文:

====================================================================

上次發現 Android QQ 和 iOS QQ 可以顯示網路狀態(2G/WiFi)之後,突然想到,這樣子好像可以監視某人的出行和作息規律。簡單的來說,在家裡或者工作的地方,一般是有 WiFi 的,然後出門了, WiFi 就斷掉了。如果監測頻率足夠頻繁,那麼結合一定的推理,可以大致推測出一個人的行動。如果長期監視,那麼可以大致推出一個人的作息時間。

因為只有 Android QQ 和 iOS QQ 有這個功能,所以要得到一個人的網路狀態比較麻煩。我的做法是跑 Android 模擬器。然後用按鍵精靈模擬,並把網路狀態截圖,用 curl post到伺服器上。伺服器會把每次發送的時間、截圖保存下來。因為是用程序截圖的,所以只要網路狀態是一樣的,那麼截圖就是一樣的,這樣伺服器就只會保存2~3張圖片而已,其餘的發現是相同的圖片,資料庫做個標記就好了。然後人工做 OCR ,還是注意到只有2~3張圖片,所以工作量很少。

得到數據後,要做各種統計就可以自己亂搞了……

不過有個問題就是: iPhone 似乎 Wi-Fi 掉了之後不會自己連上去,除非重新點亮屏幕……

Github: abcdabcd987/qq-monitor · GitHub

這個是查看數據的頁面:

這個是人工 OCR 的頁面:

=============================================================

啊,我只是發現了可以做這種事,真的沒有惡意啊!
第 1 條附言 · 320 天前
新增 Timeline 功能。

第 2 條附言 · 316 天前

前天增加了同時監視多人的功能,更新了下按鍵精靈的腳本,現在應該更方便了。個人能力和精力不足(加上這是第三次 append),所以此貼基本完結。如果前輩們願意指教,還請回復 or 聯繫我,我將不勝感激。

說下我的發現吧:

1. iPhone QQ 在 3G/4G/WiFi 狀態下,如果 QQ 不在前台的話,30分鐘後會自己變成 iPhone 2G 在線。
2. iPhone QQ 在晚上12點會準時集體顯示不在線,直到早上8點又集體以 iPhone 2G 在線形式出現。
3. Android 似乎沒有上述問題,應該比較準確(對 Android 觀測不足)
4. 感覺這個網路狀態的更新還是比較準的。我監視了自己的另一個號,當網路環境更改時(WiFi-&>4G / 4G-&>WiFi),只要 QQ 在前台運行,就會立即更新。
5. 最初我的想法是通過這個工具直接監視行動、作息,後來發現受到 iPhone 的種種限制。雖然這個工具不再那麼精確,甚至出現了盲區(00:00~08:00及 QQ 不在前台的半個小時後),但是我發現,這個工具可以非常好的配合其他社工手段。我有實驗過(例如,某對你說,他有事要出去了,好,你看到他30分鐘後立馬由 WiFi 轉成 2G,嗯,那他說的就是真的;再例如,你發現某一直都是2G 狀態,可以發條 iMessage 給某,過了段時間發現某回了 iMessage ,然後 QQ 就變 WiFi 在線了,從中就可以推測某可能之前一直在忙,沒有空玩手機之類的……)總之,可以作為一個非常好的輔助工具。

=================================================

啊,我真的沒那麼邪惡的(做這個事情覺得罪惡感好強


現放出下載地址,選電影
稍後會有微信號公布
-----------------------------------------------------------------------------------------------------------------------------------------
利用爬蟲抓取貓眼,大眾點評,淘寶,糯米四個平台的電影院,排片以及電影票票價數據,現已集成到微信公眾號中,進入微信公眾號中獲取當前位置,選中某一部電影根據當前位置獲取附近影院以及每個影院各個票價的對比,然後根據數據去最便宜的平台買票!先佔個坑,明天上圖,上數據。

各位同學不要著急,由於外網伺服器爬蟲已經停了一段時間數據不是最新的,這兩天我在優化爬蟲程序,貓眼的介面這兩天對票價欄位進行了混淆!明天一定上數據
---------------------------------------------------------2015-08-20更新---------------------------------------------------------
先上圖吧。

這張是微信里的截圖(信號和電量圖標不知道會不會逼死處女座的)
再來張資料庫里的欄位

除了美團其他數據基本都是準確的
點評的

淘寶電影的]格瓦拉的(上海的同學可能用格瓦拉的可能比較多)

這個爬蟲是5月份寫的,偶爾在跑,爬的數據比較粗糙,爬的時間也比較長,除了美團,其他的平台基本都沒多大問題,美團上個周末對票價數據進行了混淆,導致爬出的數據有問題,這個星期開始重構這個爬蟲,以後可能會上線個更精細的版本,也會增加其他平台的票價數據!
微信號就先不上了,等重構後的版本上線,我再放出微信號。
------------------------------10.9更新------------------------------
先上個圖吧,糯米這6.6的票實在太狠了,從美團和點評合併來看,糯米200億的補貼已經有了成效。
後台代碼基本重構完成,近期我會放出地址,請大家再等一等

---------------------------------------------------10.10更新---------------------------------------------------------------------
讓大家久等了,下載地址在最上面,app很毛糙,歡迎來噴,大家請只關注選電影模塊就行了,其他的請無視。微信號稍後會更新,如果核心比價模塊有問題歡迎來反饋!


我在知乎上學爬蟲,然後來爬知乎,最後做了一個終端版的知乎客戶端。
先直接上GitHub吧:GitHub - duduainankai/zhihu-terminal: 終端版知乎客戶端 (路過的話給個star唄。)

剛開始看到這個問題和以上各位的回答之後自己也希望能用爬蟲做點有意思的事情,剛巧也一直想好好學學python,以前看過一遍教程後沒做過什麼很快也就忘了,於是一舉兩得的事就開始干吧。

在知乎上搜過一圈爬蟲和python的內容,然後開始複習了一遍python,搜索的過程中發現了以前有人做過的終端版的豆瓣FM和Twitter,於是很自然的開了腦洞想著做一個終端版的知乎客戶端來刷TL是不是會挺有意思的。

更重要的是這樣一來以後在實驗室開著命令行刷知乎的話老師同學很難發現的吧,說不準還會以為我是在好好學習好好乾活的。

於是就有了下面的這些了:

因為我自己一般比較多看別人的回答也不怎麼答題所以現在實現的功能還比較少,包括了給回答點贊、關注問題和用戶等等比較基本的操作,等實驗室項目忙完還是會要再多做點擴展的。有興趣的話可以試試看在終端裡面花式刷知乎是怎樣一種體驗咯,有任何建議或者問題都歡迎聯繫我,我的郵箱是nkdudu@126.com。謝謝。


我的愛人是某網路公司的銷售,需要收集各種企業信息然後打電話聯繫。
於是乎利用採集腳本抓一坨一坨的資料給她用,
而她的同事天天自己搜資料整理到半夜,

大概就是這樣。
==============
收到感謝是因為有碼農要靠這個技能去把妹么23333


我從騰訊那「偷了」3000萬QQ用戶數據,出了份很有趣的獨家報告!


推薦閱讀:

編程中,有哪些好的習慣從一開始就值得堅持?
計算機技術類的實習要求都像說的那麼高嗎?
寫過十年代碼是種怎樣的體驗?
「Talk is cheap. Show me the code」怎麼翻譯比較好?
程序員很悶騷么?

TAG:互聯網 | 極客(Geek) | 程序員 | 爬蟲 (計算機網路) |