2013-03-17 27 views
1

我正在用Java創建一個應用程序,該應用程序將從公共網站獲取所有信息並將其加載到應用程序中供人們使用jsoup進行閱讀。我正在嘗試與Facebook相同的功能,但它的工作方式不同。有沒有人有一個好主意,我應該如何去做這件事?我想將Facebook帖子從公共頁面拖到Java應用程序

感謝, Calland

public String[] scrapeEvents(String... args) throws Exception { 
    Document doc = Jsoup.connect("http://www.facebook.com/cedarstreettimes?fref=ts").get(); 
    Elements elements = doc.select("div._wk"); 
    String s = elements.toString(); 

    return s; 
} 

編輯:我發現這個信息的鏈接,但我對如何操縱它有點困惑,讓我只對哪些特定用戶發佈的內容的壁。 http://developers.facebook.com/docs/getting-started/graphapi/

回答

2

我看看那個頁面的源代碼 - 這是絆倒了解析的是,所有真正的內容被包裹在評論的東西,像這樣:

<code class="hidden_elem" id="u_0_42"><!-- <div class="fbTimelineSection ...> --></code> 

有JS上將數據提升到真實DOM的頁面,但由於jsoup不執行JS,所以它保留爲註釋。因此,在提取內容之前,我們需要模擬JS並「隱藏」這些元素。以下是一個示例,幫助您開始:

String url = "https://www.facebook.com/cedarstreettimes?fref=ts"; 
String ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.33 (KHTML, like Gecko) Chrome/27.0.1438.7 Safari/537.33"; 
Document doc = Jsoup.connect(url).userAgent(ua).timeout(10*1000).get(); 

// move the hidden commented out html into the DOM proper: 
Elements hiddenElements = doc.select("code.hidden_elem"); 
for (Element hidden: hiddenElements) { 
    for (Node child: hidden.childNodesCopy()) { 
     if (child instanceof Comment) { 
      hidden.append(((Comment) child).getData()); // comment data parsed as html 
     } 
    } 
} 

Elements articles = doc.select("div[role=article]"); 
for (Element article: articles) { 
    if (article.select("span.userContent").size() > 0) { 
     String text = article.select("span.userContent").text(); 
     String imgUrl = article.select("div.photo img").attr("abs:src"); 
     System.out.println(String.format("%s\n%s\n\n", text,imgUrl)); 
    } 
} 

該示例提取了文章文本以及與其關聯的任何照片。

(這可能是最好使用FB API,這種方法。我想告訴你如何效仿JS的小位做出刮正常工作)

+0

是否有可能獲取文本評論評論過交? – Prasad 2013-09-24 14:30:38

+0

是否有可能通過使用jsoup 例如 從facebook頁面獲得newlikes計數https://www.facebook.com/blick/likes 從頁面我需要新頁面贊成計數。 – 2015-06-30 09:53:11

相關問題