如何用 Python 爬取社交網路(如微博)?
python小白…打算從爬取社交網路開始學習,想法是
1.爬取&>10k的用戶以及他們的互粉信息2.建社交網路圖想問下具體需要哪些工具和那些學習,謝謝
我是如何找到在知乎上我距離 @vczh 、 @OnlySwan 的距離的?
(P.S. 轉載自我的博客:http://xlzd.me/2016/01/31/python-crawler-09)
首先考慮這個問題的解決方案以及與爬蟲的關係吧。一個比較可行的方案是,抓取所有人的關注列表及被關注列表,然後通過一個有向圖連接起來,找兩個人的最短關聯關係,實際上就是就圖中兩個節點的最短路徑。考慮到我希望得到的是仰望型的關係圖,即從一個較有名氣的人的關注列表出發,能否在他的關注鏈上游找到自己(舉例:我關注輪子哥很正常,但是輪子哥沒有關注我,不過他的關注鏈上有我,我希望藉此找到這個鏈上的所有人)。所以,這個問題還可以得到進一步的簡化:只是抓取每個人的關注列表而忽略粉絲列表,存儲下這個人(Node)及與關注列表每個人的對應關係(Relationship)。
那麼,對應的實現應該如何解決呢?首先要知道知乎的用戶很大,即使剛才的方案幹掉了所以沒有任何人關注的用戶,但是有至少一個人關注的用戶依舊很多,所以不建議自己維護這樣一個很大的圖,Graph Database 是一個不錯的選擇,這篇博客中,我將使用 neo4j 來存儲節點及其關係。而對應的用戶及抓取列表,將使用Mongo存儲。
既然找到了解決方案,那麼上手開始吧。關於 neo4j 的安裝及基本使用,以及cypher( neo4j 使用的操作語法)的入門介紹,這裡將一筆略過,如果你沒有 neo4j 的使用經驗,請讀者自行去 neo4j 的官網閱讀學習。
現在,我們將任務進一步細化:
1. 從知乎的某個用戶 x 開始,得到他的關注列表
2. 將 x 與其關注列表中的每個人 each 建立關係: x --FOLLOWING--&> each 3. 將關注列表還沒有抓取關注列表的用戶放入 Mongo 中 4. 如果 Mongo 中還有未抓取關注列表的人,重複 1然後,對於需要查詢某兩個人之間的最短路徑,只需要在 neo4j 的 web 終端里使用對應的 cypher 語句即可。
分析部分至此結束,這裡並不打算一步一步寫出代碼,代碼可以參考博客中的內容。。
最後,在這裡貼兩張圖片吧,分別對應著輪子哥的關注鏈上我的位置和四萬姐的關注列表上我的位置:
由圖容易看出,輪子哥與我只間隔了一個人,而四萬姐與我之間間隔了最少兩個人。
首先得聲明一下,不是打廣告,確實是實際解決問題,一般用python寫的話都涉及到Scrapy這個包的使用,你可以在網上搜索一下,知友也有過類似的回答,可以參看用Python寫爬蟲,用什麼方式、框架比較好? - Python 框架。。。 好,接下來說實際的,你是個python小白,如果你真的是想一邊學習python一邊爬數據,那麼參看python教程一步步學習,是一個成長與收穫的過程。但如果你僅僅是為了收集這些數據,分析才是重頭戲,或者說說僅僅是論文需要,那麼,完全沒必要自己動手寫,直接用爬蟲軟體就可以解決。GooSeeker、火車頭、狂人、八爪魚、網路礦工、集搜客應該都能採集這些數據,至於你要用哪個,我當然推薦集搜客。。。原因嘛,就不多說了
微博沒有抓過,知乎倒是抓過。最近仍然在抓(微博受了某位大大的邀請最近也在準備抓,等抓了再來補充一下回答)。那麼先說一下知乎吧,一下根據題主的問題描述回答。問題一:1.爬取&>10k的用戶以及他們的互粉信息如果你想通過自己的努力去得到這些信息,建議用點時間去學習一下python爬蟲。當然如果你只需要數據只是想用來分析,你可以花點錢去買這方面的資源。關於學習爬蟲你可以用十天時間學習入門:如何學習Python爬蟲[入門篇]? - 知乎專欄有了爬蟲的知識,相信抓10k的用戶信息都很簡單,中間你可能遇到一些反爬蟲的限制,沒關係,網路上有很多解決方法。勤於使用搜索引擎。
2.建社交網路圖
如何用 Python 爬取社交網路(如微博)? - xlzd 的回答對於第二點,目前尚未嘗試過。參考這個回答,受益匪淺。最近開發做了個Python的新浪微博爬蟲!
源碼地址為GitHub - Kevinsss/weibo_spider從資料庫中拿出用戶id列表,批量爬取一批用戶id的微博數據,然後保存相應的內容到資料庫中。可以動態爬取,每天開個定時啟動任務,自動會爬取數據有無更新,有更新則更新資料庫。
如需要爬取單個用戶,注釋掉那部分代碼即可。我沒有用Scrapy框架,手寫的,解析並不複雜,用的BS4,注意要手動登錄,獲取cookie。微博反爬策略還是比較強的,用API的方式限制真的太多了,完全做不到想要什麼就爬什麼。PC端的數據比較難分析,它把數據放到script標籤塊中,用瀏覽器去渲染出來的,直接抓是拿不到的,要分析script標籤塊。最好爬的一種就是移動端網頁,http://weibo.cn,數據格式簡單,限制也少。
twitter提供了api,一個twitter的庫,方便開發者。類似wikipedia,yahoo finance都有。我朝的大環境還是不行。
你可以用那些已經存在的來爬去,這樣不是更加快一點嗎,免費的又不是沒有,搜數這些就是,操作也蠻簡單的,不需要很複雜的,這樣來那樣去
The hardest part is not how to write a Python Scraping programming, but how to overcome the limit on number of requests and data retrieving per hour or per day. And how to avoid your programming being detected as malware.
去年半年爬了6億用戶的微博,感覺沒什麼用,一台機器差不多半年,準備600個左右賬號。因為我對直播比較感興趣,現在在騰訊VPS最便宜的機器上,每天抓一下幾千個主播的微博的每天的更新。可以看看主播微博www.yibo666.cn/livetv/weibo
對twitter數據進行挖掘
Twitter是一個流行的社交網路,這裡有大量的數據等著我們分析。Twitter R包是對twitter數據進行文本挖掘的好工具。 本文是關於如何使用Twitter R包獲取twitter數據並將其導入R,然後對它進行一些有趣的數據分析。
第一步是註冊一個你的應用程序。
為了能夠訪問Twitter數據編程,我們需要創建一個與Twitter的API交互的應用程序。
註冊後你將收到一個密鑰和密碼:
獲取密鑰和密碼後便可以在R裡面授權我們的應用程序以代表我們訪問Twitter:
根據不同的搜索詞,我們可以在幾分鐘之內收集到成千上萬的tweet。 這裡我們測試一個關鍵詞littlecaesars的twitter結果:
抓取最新的1000條相關twitter
由於默認的抓取結果是json格式,因此使用twlisttodf函數將其轉換成數據框
然後我們做一些簡單的文本清理
從得到的數據里,我們可以看到有twitter發表時間,內容,經緯度等信息
在清理數據之後,我們對twitter內容進行分詞,以便進行數據可視化
分詞之後可以得到相關twitter的高頻辭彙,然後將其可視化
除此之外,還可以結合數據中的時間戳數據和地理數據進行可視化分析
如果你一直在考慮對一些文本數據應用情感分析,你可能會發現使用R比你想像的更容易!本文分享了使用twitterR的粗淺心得,有問題歡迎交流討論!(qq 570881451)
歡迎關注微信公眾號:拓端數據
我們採集了1.8億的微博用戶信息,正準備採集微博用戶關係;說到工具,我們是用自己開發的爬蟲系統;其實,如果不想花費很多時間,scrapy就足夠了; 當然,採集數據,僅僅有爬蟲還是不夠的,還需要研究目標網站的數據請求方式和反爬蟲策略;
買了幾個爬蟲,有的好用,有的有bug。
反正性價比還不錯。推薦閱讀:
※你用 Python 或者程序語言寫過哪些好玩或者實用的小應用?
※一個比較理想的分散式爬蟲架構是怎樣的?
※Python 編碼為什麼那麼蛋疼?
※如何維護爬蟲程序中的代理ip庫?
※python模擬登錄知乎,captcha是手工輸入,為什麼也提示captcha錯了?