2016-07-28 77 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