【问题标题】:How to extract text from specific rows in nested tables with Jsoup如何使用 Jsoup 从嵌套表中的特定行中提取文本
【发布时间】:2015-07-31 15:27:57
【问题描述】:

我正在使用 Jsoup 从网站中提取文本,但我不知道如何正确获取嵌套表中的特定数据行。我需要在 Property Address:Mailing Address: 部分之后获取纯文本,以便存储数据。

这是我正在解析的 HTML 源代码:

<table width="730" border="0" cellspacing="0" cellpadding="2">
  <tr> 
    <td><table width="730" border="0" cellspacing="0" cellpadding="2">
      <tr> 
        <td><h1>Property Information</h1>
          <table width="758">
            <tr>[IRRELEVANT]</tr>
            <tr>[IRRELEVANT]</tr>
            <tr>
              <td colspan="3"><strong>Property Address:</strong>&nbsp;!!THIS PLAIN TEXT HERE IS WHAT I NEED!! DATA1</td>
              <td>&nbsp;</td>
              </tr>
            <tr>
              <td colspan="3"><strong>Mailing Address:</strong>!!NEED THIS TOO!! DATA2</td>
              <td>&nbsp;</td>
              </tr>
            <tr>[IRRELEVANT]</tr>...................

我用这个作为模板,但它不起作用,我不知道如何使它起作用。

Document documentSerialNumberPageData = Jsoup.connect(stringURLOfSerialNumberPage).get();   //connect to serial number page
Elements elementsSerialNumberPageData = documentSerialNumberPageData.select("#tabletext tbody > tr > td > tbody > tr > td > tbody > tr > td");  //this is not even remotely correct... :(
Element elementAddress = elementsSerialNumberPageData.get(0);
System.out.println(elementAddress.text());

我对 HTML/CSS 的了解非常有限,但我精通 Java。有什么建议么?谢谢! 完整来源:https://github.com/PhotonPhighter/NODScraper/blob/master/src/nodscraper/Main.java

【问题讨论】:

    标签: java html dom jsoup


    【解决方案1】:

    你可以试试这个:

    Elements innerTable = documentSerialNumberPageData.select("body > table:nth-child(2) > tbody > tr > td > table > tbody > tr > td > table:nth-child(2)");
    String propertyAddress = ((org.jsoup.nodes.TextNode)innerTable.select("tr:nth-child(3) > td > strong").first().nextSibling()).text();
    String mailingAddress = ((org.jsoup.nodes.TextNode)innerTable.select("tr:nth-child(4) > td > strong").first().nextSibling()).text();
    

    首先,选择table,然后在第三个tr 中选择第一个td 中的strong 标签,然后选择下一个同级标签,将text() 放入其中你就完成了。我们对第四个tr 做同样的事情。

    使用text() JSoup 会将&amp;nbsp; 转换为空格,如果您不喜欢,也可以调用toString()

    希望对你有帮助。

    PS:我可以建议一个技巧吗?您可以使用 Chrome 或 Firefox 的开发者工具在 html 页面中查找标签,然后右键单击并Copy CSS Path。这将为您提供可以在 JSoup 中使用的选择器!

    【讨论】:

    • 谢谢!这非常有帮助!我不知道你可以在浏览器中这样做来获取这些标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2020-04-19
    • 2019-06-23
    • 2019-04-11
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多