標籤:

如何寫爬蟲程序爬取豆瓣網或者新浪微博里的內容?


新浪微博和豆瓣的爬蟲,很早以前做過,不知樓主需要哪些數據,總體而言,大約有這幾種採集方法:

  • 新浪微博和豆瓣都提供了api,前提是必須得先申請一個key,返回的文檔形式可以是json或者xml,都非常方便解析。缺點是,如果你要的數據比較特殊,而不僅僅是影評、書評這些,那就得用專門編寫的爬蟲
  • 爬蟲程序,一般不是通用的,具有針對性,所以沒多少爬蟲軟體,大家採集數據通常都是自己編寫程序。這裡就有一個程序語言選擇的問題,後文以Python為主,C#和C++編寫爬蟲也順便提一提,下面是具體的介紹:

Python因為其易學易用、語法簡單、url請求和字元串處理都非常便捷,而成為數據採集最流行的工具。

先闡述下爬蟲到底做了一件什麼事情,我們假設現在有這樣一個需求:

要採集豆瓣某用戶所有的書評和廣播,譬如這樣:

瀏覽器把資源文件渲染成了我們看到的網頁的樣子,我們如果要取出網頁中的數據,就需要拿到資源文件。發起Http請求,然後解析伺服器返回的響應,就是爬蟲的工作,所以爬蟲的第一步是獲取html文件。

在面向對象的高級語言中,早已有人將http請求封裝成了類庫,你只需要調下某幾個函數,就能獲得目標網頁的源碼。所以爬蟲程序的基本工作就是:

  • 獲取目標頁面源碼 -&> 調用對應的類庫
  • 解析html文件,提取出自己想要的信息 -&> 使用正則表達式解析字元串或者調用解析html的庫

按照上述步驟,Python涉及的包/庫是:

  • urllib,urllib2,前者僅可以接受URL,不能偽裝Header,但是需要用它的一個函數對post數據進行編碼。 另外可以用Selenium+phantomjs(動態爬蟲——selenium2搭載phantomjs入門範例)來模擬瀏覽器,理論上更簡單,傻瓜操作,但失去了學習的意義
  • BeautifulSoup,一個簡單易用的解析html字元串的包

(可以直接跳到 前期需要準備的知識

C++(Qt)涉及的類是:

  • WebView,它的內核其實就是webkit,所以它就是一個功能原始的瀏覽器,他內置能夠返回頁面源碼的函數,接受一個url的string類型參數,返回一個QString對象。
  • WebView類有方法能夠處理DOM。

C#(.net)涉及的類是:

  • WebClient,WebRequest,HttpWebRequest等類,第一個封裝得比較高級,寫法簡單,後面兩個封裝得低級,寫起來麻煩但是用起來靈活,其中HttpWebRequest是WebRequest的一個子類。

  • 比較流行的有Html Agility Pack。

前期需要準備的知識

  1. 了解http請求、抓包等知識(極其重要

  2. 若python還沒學那就先學python
  3. 學會使用urllib2和BeautifulSoup這兩個庫,推薦 -&> 用Python模擬登錄網站 -- 簡明現代魔法
  4. 找一個簡單易抓的網站練練手,不需要登陸的,如songtaste
  5. 再來試試需要登錄的,譬如教務系統一類的。

當你能夠熟練使用urllib2和BeautifulSoup獲取解析簡單的頁面以後,你會發現,更大的問題原來在後面:

  1. 豆瓣如果登陸失敗三次以上,就需要輸入驗證碼。
  2. 爬蟲跑了十分鐘以後,豆瓣他竟然把我的ip封了!
  3. 現在一般都用ajax來動態獲取數據,光靠url是不行啦。
  4. 教務系統之類的網站喜歡用iframe,拿到源碼一看,好像只有一個框架,沒有內容。

可參考的解決方案:

  1. OCR?豆瓣的驗證碼十分扭曲且奇形怪狀,想讓機器自動識別難度不小。推薦的方法是獲取驗證碼圖片到本地,自己手動輸入登錄以後爬蟲再接著自己玩。
  2. 首先是可以用代理,如果用goagent的話,你就到了加州了,同時ip不停地變,根本停不下來。但是可能訪問速度會慢很多。所以並不推薦代理。而且貌似goagent的代理不支持https的請求。當然也有更簡單的方法。注意每次請求的間隔稍微加長一些,1秒左右,這樣的速度一般不會被封。ip被封后過一段時間就會恢復,把每次採集的量規劃一下,多分幾次完成。
  3. 學一學ajax的原理,依然還是post,而且ajax的好處在於可以直接拿到數據,而不需要在html文件裡面找來找去。
  4. 有框架也沒關係,內容就在框架裡面,一層一層進去找。

tips(2014年9月):

如果要獲取用戶好友列表的話,別對準新浪微博,他的關注者顯示不全,到十頁左右就沒了。出來一個提示:該用戶粉絲太多,顯示不全。

以前寫過的五個爬蟲(songtaste,微博,知乎,豆瓣,大麥)(GentlyGuitar/web-crawlers · GitHub),難度從簡單到不那麼簡單,代碼可能都過時了,但可能可以起點參考作用。


我講講新浪微博的吧,只做過這個

1、你要想隨便爬爬,就直接用新浪的api,多申請幾個項目,多註冊幾個測試小號,然後直接爬

2、如果向爬大量數據,網頁爬取,PC版(http://weibo.com)的需要解析js,所以建議抓取手機版(http://weibo.cn),抓取網頁,正則表達式匹配就好了,代碼1000行不到


從java角度來分享一下,學習爬蟲分以下幾步走

1. HTTP request來獲取網頁,存儲網頁。發現很多頁面請求抽取的頁面都是AJAX,推薦開源實現htmlunit,可以模擬瀏覽器。

2. HTML/XML分析,可以用比較好的框架JSoup/Xsoup,來抽取更多的url,同樣可以來獲取其他html元素。

3. 篩選url。需要用正則表達式,也就pattern matcher來過濾有用的url。

4. 選擇下一步,開始下載更多的頁面。BFS和DFS或者其他的演算法取決於你的需求,一般都是BFS。

5. 一個線程顯然不夠,開啟多個線程。

6. 設計一個下載線程池,以及下載隊列。

7. 設計一個處理線程池,來處理保存的網頁內容。內容篩選依然需要正則。

8. 對內容進行相關性管理,做一個簡單的rank評級。簡單的爬蟲可以用關鍵詞管理,比如出現不同的關鍵詞,則頁面有不同的相關度。無關的從資料庫剔除。

......

以上是自己無聊在寫的爬蟲進度,瑕疵還有很多,而且自己沒什麼要爬的東西,所以動力不是很足......

推薦一個優秀的Java開源爬蟲,結構非常清晰

code4craft/webmagic · GitHub

附上一個結構圖。


這是我的爬蟲..

畢業設計 – 偏執狂

請多多指教。

請star 和 fork。。


建議有python基礎的可以看看我寫的分散式微博爬蟲程序,內容涵蓋了幾乎所有關於微博內容的抓取:從分析模擬登陸開始,到特定話題搜索、再到用戶信息抓取、再到用戶主頁所有微博抓取、再到微博所有評論抓取、再到微博轉發關係抓取。項目做了大量的測試,總體來說比較健壯,並且模塊復用性很好,能省去你不少解析微博頁面的時間。

下面是項目地址

ResolveWang/WeiboSpider


專欄:拓端數據研究院

用r對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)

歡迎關注微信公眾號:拓端數據


最近在用Python寫微博爬蟲,目的是爬取用戶發的微博的圖片。

具體分析:Python實現微博爬蟲

項目源代碼:https://github.com/darrenfantasy/image_crawler/blob/master/SinaWeibo/weibo_crawler.py


最近接觸到一個新聞類網站的數據爬取項目,包括各大新聞網站,如網易、騰訊、新浪等新聞標題、時間、評論數、點贊量、轉發量以及閱讀量等數據獲取。其中較麻煩模塊主要是動態數據的獲取,以及新浪微博數據的獲取,在此分享一些經驗給大家參考,如有不對望指正交流、共同進步。

新聞數據爬蟲分析


用爬蟲爬開放介面api或者模擬登錄爬取


新浪微博爬蟲

用WebCollector爬取新浪微博數據


微博開放api我用過,功能有限,不比直接爬來的自由來的多。


請教一下,如何能通過爬蟲獲取一個用戶的全部粉絲列表呢?當大V特別多粉絲的時候,翻10頁就顯示「顯示不全」了。有技術手段突破嗎?


爬取豆瓣的不太了解,但是爬取微博的有在做,因為在做基於微博大數據的社交分析。我在python爬新浪的過程中嘗試過多種辦法,最終發現了可以利用特殊API大規模高效率爬取詳細的微博信息的方法。後面我都是用這種方式在爬。能夠爬到非常詳細的信息,如下:

我在博客里有寫了具體思路和流程:SegmentFault博客


新浪的api也不好用,很多限制突破不了。我自己寫了個爬蟲程序,成功突破了新浪的限制,現在也在跟很多人合作,需要的看我→名字


不是打廣告,我用八爪魚爬了何凱文考研微博的所有文章,很好用。

這是我寫的一個例子: 爬蟲抓取微博文章


正好我這兩個方面都做過…代碼都很簡單可以到我的博客裡面看看地址是 http://8aoy1.cn


新浪微博爬蟲[按微博昵稱爬取]

豆瓣採集(按小組)爬蟲


推薦閱讀:

輪子哥的gaclib發展的怎樣?走的時什麼路線?
計算機專業大類下,還有哪些細分的專業,分別是幹什麼的?
你見過的最牛逼的命令行程序是什麼?
有沒有推薦的能顯示時鐘的,且簡單樸素的 Windows 屏幕保護程序?
拉比克偷取他人技能,在代碼程序層面時如何實現的?

TAG:程序 |