2016-07-28 82 views
4

我試圖使用jsoup從linkedin配置文件中提取電子郵件地址和電話號碼,每個信息都在一個表中。我寫了一段代碼來提取它們,但它不起作用,代碼應該在任何linkedin配置文件上工作。任何幫助或指導將不勝感激。用jsoup解析一個表

public static void main(String[] args) { 
    try { 

     String url = "https://fr.linkedin.com/"; 
     // fetch the document over HTTP 
     Document doc = Jsoup.connect(url).get(); 

     // get the page title 

     String title = doc.title(); 
     System.out.println("Nom & Prénom: " + title); 
     // first method 
     Elements table = doc.select("div[class=more-info defer-load]").select("table"); 
     Iterator <Element> iterator = table.select("ul li a").iterator(); 
     while (iterator.hasNext()) { 
      System.out.println(iterator.next().text()); 
     } 
     // second method 
     for (Element tablee: doc.select("div[class=more-info defer-load]").select("table")) { 
      for (Element row: tablee.select("tr")) { 
       Elements tds = row.select("td"); 
       if (tds.size() > 0) { 
        System.out.println(tds.get(0).text() + ":" + tds.get(1).text()); 
       } 
      } 
     } 
    } 
} 

這裏就是我試圖提取的HTML代碼的例子(從LinkedIn的個人資料拍攝)

<table summary="Coordonnées en ligne"> 
    <tr> 
     <th>E-mail</th> 
     <td> 
     <div id="email"> 
      <div id="email-view"> 
       <ul> 
        <li> 
        <a href="mailto:[email protected]">[email protected]</a> 
        </li> 
       </ul> 
      </div> 
     </div> 
     </td> 
    </tr> 
    <tr class="no-contact-info-data"> 
     <th>Messagerie instantanée</th> 
     <td> 
     <div id="im" class="editable-item"> 
     </div> 
     </td> 
    </tr> 
    <tr class="address-book"> 
     <th>Carnet d’adresses</th> 
     <td> 
     <span class="address-book"> 
     <a title="Une nouvelle fenêtre s’ouvrira" class="address-book-edit" href="/editContact?editContact=&contactMemberID=368674763">Ajouter</a> des coordonnées. 
     </span> 
     </td> 
    </tr> 
</table> 
<table summary="Coordonnées"> 
    <tr> 
     <th>Téléphone</th> 
     <td> 
     <div id="phone" class="editable-item"> 
      <div id="phone-view"> 
       <ul> 
        <li>0021653191431&nbsp;(Mobile)</li> 
       </ul> 
      </div> 
     </div> 
     </td> 
    </tr> 
    <tr class="no-contact-info-data"> 
     <th>Adresse</th> 
     <td> 
     <div id="address" class="editable-item"> 
      <div id="address-view"> 
       <ul> 
       </ul> 
      </div> 
     </div> 
     </td> 
    </tr> 
</table> 
+2

你知道,LinkedIn具有API? –

+0

是的,我知道,那不是我想要的解決方案。 – AMI

回答

0

要刮電子郵件和電話號碼,使用CSS選擇器爲目標的元素身份標識。

String email = doc.select("div#email-view > ul > li > a").attr("href"); 
    System.out.println(email); 

    String phone = doc.select("div#phone-view > ul > li").text(); 
    System.out.println(phone); 

查看CSS Selectors瞭解更多信息。

輸出

mailto:[email protected] 
0021653191431 (Mobile) 
+0

我沒有收到任何運行此代碼的錯誤,但它也不會返回任何結果!我無法弄清楚問題出在哪裏。 – AMI

+0

問題是,除非您已登錄,否則LinkedIn聯繫人信息不可用。在連接到配置文件時,您需要登錄並傳遞cookie。這裏是一個例子:http://stackoverflow.com/questions/31640844/login-to-website-through-jsoup-post-method-not-working –

+0

我試圖完全像你給我的例子,但它保持沒有任何回報奇怪的是我實際上可以像用戶的體驗和教育一樣獲取其他數據,所以我不認爲問題與cookie相關,是嗎? – AMI