跨度中的 jsoup 跨度作为单个对象返回

Posted

技术标签:

【中文标题】跨度中的 jsoup 跨度作为单个对象返回【英文标题】:jsoup span in span return as single bject 【发布时间】:2017-09-06 15:41:06 【问题描述】:

我正在尝试从这个 html 中挖掘一些数据, html 在另一个跨度内有跨度 (Seems like valid html according to other stack over flow post)

所以表达

td  > p > span

返回 2 个元素(第二个元素包含两个 span) 有没有办法解决这个问题?

在这个例子中,我感兴趣的值是 03/26/17

<td  style="width:310.25pt;border:none;border-bottom:solid #AEAAAA 1.0pt;padding:0in 5.4pt 0in 5.4pt;height:.3in">
    <p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt;line-height:normal">
&nbsp;

        <span style="font-size:8.0pt;font-family:&quot;Arial&quot;,sans-serif;color:black">03/</span>
        <span style="font-size:8.0pt;font-family:&quot;Arial&quot;,sans-serif">26<span style="color:black">/17</span>
        </span>
        <o:p/>
    </p>
</td>

代码:

protected String getSimpleValue(org.jsoup.nodes.Document doc,String selector) 
    StringBuffer buff = new StringBuffer();

    try            
        Elements result = doc.select(selector);

        for (Element element : result) 
            buff.append(element.ownText()+" ");
            
    catch(Exception ex) 
        ex.printStackTrace();
    
return buff.toString();

【问题讨论】:

您的问题是什么?你期望什么,你会得到什么? 【参考方案1】:

你可以试试下面的代码。这将给出你想要的结果。

 Element ele= document.select("p[class=MsoNormal]").get(0);
 String strdate = ele.text().replaceAll(" ", "");
 System.out.println(strdate);

说明: U可以直接创建pclass="MsoNormal"的元素,并使用.text()获取文本。因为有一些空间,所以可以使用.replaceAll(" ", "")。 希望这会对你有所帮助。

你的结果: 03/26/17

【讨论】:

【参考方案2】:

“03/”的选择器是.MsoNormal &gt; span:nth-child(1),“26/17”的选择器是.MsoNormal &gt; span:nth-child(2)。 你可以看到它here。

【讨论】:

以上是关于跨度中的 jsoup 跨度作为单个对象返回的主要内容,如果未能解决你的问题,请参考以下文章

Beautifulsoup 4 spans containsg '@' 返回奇怪的结果

LeetCode 0901. 股票价格跨度

Python with Selenium:点击拦截并找到不同的跨度类

901. 股票价格跨度

以日期时间格式查找两列数据之间的单个时间跨度,可能使用 for 循环

垂直对齐引导行中的跨度