使用Jsoup解析表格

5
我正在尝试使用jsoup从Linkedin配置文件中提取电子邮件地址和电话号码,每个信息都在一个表格中。我已经编写了提取它们的代码,但是它无法正常工作,这段代码应该适用于任何Linkedin配置文件。非常感谢您的任何帮助或指导。
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:adam1adam@gmail.com">adam1adam@gmail.com</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 吗? - underwater ranged weapon
是的,我知道,那不是我想要的解决方案。 - AMI
1个回答

1
使用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选择器获取更多信息。

输出

mailto:adam1adam@gmail.com
0021653191431 (Mobile)

我运行这段代码时没有收到任何错误,但也没有返回任何结果!我无法弄清楚问题出在哪里。 - AMI
我尝试按照你给我的例子做,但它一直返回空值!奇怪的是,我实际上可以获取其他数据,比如用户的经验和教育,所以我不认为问题与 cookie 有关,是吗? - AMI
我明白你的意思,我尝试按照你给我的示例操作,但是它没有起作用。我向[https://www.linkedin.com/uas/login]发送了一个get请求,然后我向[https://www.linkedin.com/nhome/]发送了一个带有我的邮件地址和LinkedIn密码的post请求,但是我不知道如何导航到我想要获取的个人资料页面。 - AMI
@AAA 请尝试此解决方案:https://dev59.com/xozda4cB1Zd3GeqPqsX5 - Zack
你需要添加.cookie(previousConnect)。 - Salman Salman
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接