2013-03-02 52 views
1

我正在爲我的一個課程創建一個推特機器人,練習使用隊列和建立我的簡歷。使用Java從網頁上刮取數據?

我想讓機器人從paper.li時事通訊中刮取twitter句柄,然後發送用戶推文。

這是一個示例網頁。 http://paper.li/profkane/1335985326

我的推理最初是爲了抓取網頁的鏈接,然後獲取頁面源碼,瀏覽@twitterhandle,然後將它們添加到隊列中,稍後在構建消息時使用。

我擡頭看了頁面源代碼,但在網頁的任何位置找不到twitter名稱。這仍然可以在Java中完成嗎?

+1

你在用Javascript混合Java嗎? – 2013-03-02 08:42:59

+0

我不打算除非必須。我希望我可以在java中完成所有這些。我不熟練javascript – Ali 2013-03-02 08:44:10

+0

你能更好地描述一下你的意圖是什麼?不知怎的,我沒有得到「微博處理」部分。 。唯一的事情,我得到關於嘰嘰喳喳示例鏈接你給了小部件,這是使用JavaScript的鳴叫更新自己 – Ewoks 2013-03-02 08:48:35

回答

1

您需要使用具有javascript支持的庫。我使用HtmlUnit爲這是一個偉大的庫複製瀏覽器的行爲!

查看我的修改答案from this question下面有關如何使用javascript訪問頁面的簡單示例。

第一個,檢查他們的網頁(http://htmlunit.sourceforge.net/),讓htmlunit啓動並運行。請確保您使用最新的快照(2.12寫這個的時候)

嘗試這些設置忽略幾乎任何障礙:獲取你的頁面時

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17); 
webClient.getOptions().setRedirectEnabled(true); 
webClient.getOptions().setCssEnabled(false); 
webClient.getOptions().setThrowExceptionOnScriptError(false); 
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); 
webClient.getOptions().setUseInsecureSSL(true); 
webClient.getOptions().setJavaScriptEnabled(true); 
webClient.getCookieManager().setCookiesEnabled(true); 

然後,確保你做任何事情之前等待背景的Javascript與頁面一樣,等待後臺JavaScript。

//Get Page 
HtmlPage page1 = webClient.getPage("https://login-url/"); 

//Wait for background Javascript 
webClient.waitForBackgroundJavaScript(10000); 

//Get full page _after_ javascript has rendered it fully 
System.out.println(page1.asXml());  

我希望這個基本的例子能幫助你!

您可以使用HtmlUnit完成瀏覽器可以執行的任何操作,但通過編程方式。

+0

謝謝這是有趣的東西。我意識到還有另一層複雜性。我鏈接到上面的頁面不包括Twitter處理名稱。我必須單獨點擊每個鏈接,然後使用包含Twitter句柄(@name)的JavaScript顯示一個小框。將htmlPage處理這個。我想我必須打印整個頁面,每次我點擊一個鏈接。 – Ali 2013-03-02 09:15:59

+0

實際上,我只是檢查了示例網頁,鏈接顯示了twitter的名稱,而不是twitter鏈接到www的twitter句柄(@name)。我從htmlUnit獲得的xml文件中的twitter.com/@name將包括Twitter Name Ali 2013-03-02 09:20:28

+0

你可以用htmlunit來做到這一點。如果鏈接是已經加載數據的隱藏div,它應該在源代碼中可見,不需要讓htmlunit單擊它們。如果您想與網頁互動,請在我的答案開始處的鏈接問題中查看我的原始答案! – OakNinja 2013-03-02 09:34:33

0

就抓取而言,您可以刮掉整個頁面並查找twitter id(或句柄)。當我檢查示例頁面時,我無法找到句柄,但在Twitter圖標中有鏈接到用戶帳戶的鏈接。你可以用它來獲取句柄。如果你正在尋找Java中的圖書館,你可以給JSOUP一個鏡頭。