【问题标题】:parsing a table with jsoup用 jsoup 解析表
【发布时间】:2016-07-28 09:28:21
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

  • 你知道linkedin有api吗?
  • 是的,我知道,这不是我想要的解决方案。

标签: java web-scraping jsoup linkedin


【解决方案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 Selectors

输出

mailto:adam1adam@gmail.com
0021653191431 (Mobile)

【讨论】:

  • 运行此代码没有任何错误,但它也没有返回任何结果!我不知道问题出在哪里。
  • 问题是LinkedIn联系信息只有在您登录后才可用。您需要登录并在连接到个人资料时传递cookie。这是一个例子:stackoverflow.com/questions/31640844/…
  • 我试图完全按照你给我的例子做,但它一直没有返回任何东西!奇怪的是我实际上可以获取其他数据,例如用户的经验和教育,所以我认为问题与 cookie 无关,是吗?
  • 如果你使用 Jsoup.connect(url).get() 那么你没有传递 cookie,这就像你在没有登录的情况下访问 LinkedIn.com。你必须登录查看联系信息。您无需登录即可查看其他公开数据,但无法查看联系信息。
  • 我明白你的意思,我试着按照你给我的例子但是没有用,我向 [linkedin.com/uas/login] 发送了一个获取请求,然后我用我的邮件地址发送了一个帖子请求,并且链接到 [linkedin.com/nhome/] 的密码,但不知道如何导航到我想要获取的配置文件。
猜你喜欢
  • 2014-02-08
  • 2014-03-01
  • 2015-08-17
  • 2014-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
相关资源
最近更新 更多