我正在尝试从 HADOOP Jira 问题站点 ( https://issues.apache.org/jira/projects/HADOOP/issues/HADOOP-16381?filter=allopenissues ) 中提取有关问题创建日期的信息

正如您在 Screenshot 中看到的那样,创建日期是类为 live stamp 的时间标签之间的文本(例如 <time class=livestamp ...> 'this text' </time> )

所以,我尝试用下面的代码解析它。

import java.io.IOException; 
 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
 
public class CreatedDateExtractor { 
    public static void main(String[] args) { 
        String url = "https://issues.apache.org/jira/projects/HADOOP/issues/HADOOP-16381?filter=allopenissues"; 
        Document doc = null; 
 
        try { 
            doc = Jsoup.connect(url).get(); 
        } catch (IOException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
 
        Elements elements = doc.select("time.livestamp"); //This line finds elements that matches time tags with livestamp class 
        System.out.println("# of elements : "+ elements.size()); 
        for(Element e: elements) { 
            System.out.println(e.text()); 
        }    
    } 
} 
 
 
 

我希望提取创建日期,但实际输出是 元素数量:0

我发现这是有问题的。因此,我尝试使用下面的代码从该侧解析整个 html 代码。

import java.io.IOException; 
 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
 
public class CreatedDateExtractor { 
    public static void main(String[] args) { 
        String url = "https://issues.apache.org/jira/projects/HADOOP/issues/HADOOP-16381?filter=allopenissues"; 
        Document doc = null; 
 
        try { 
            doc = Jsoup.connect(url).get(); 
        } catch (IOException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
 
        Elements elements = doc.select("*"); //This line finds whole elements in html document. 
        System.out.println("# of elements : "+ elements.size()); 
        for(Element e: elements) { 
            System.out.println(e); 
        }    
    } 
} 
 

我把chrome devtools中的html代码和我解析出来的html代码都一一对比了。然后我发现这些是不同的。

您能否解释一下为什么会发生这种情况,并给我一些如何提取创建日期的建议?

请您参考如下方法:

我建议您获取带有“time”标签的元素,并使用 select 来获取具有“livestamp”类的时间标签。这是示例:

Elements timeTags = doc.select("time"); 
Element timeLivestamp = null; 
for(Element tag:timeTags){ 
  Element livestamp = tag.selectFirst(".livestamp"); 
  if(livestamp != null){ 
   timeLivestamp = livestamp; 
   break; 
   } 
 
} 

我不知道为什么,但是当我想使用 Jsoup 的 .select() 方法和超过 1 个选择器时(就像你使用的 time.livestamp 一样),我会得到这样有趣的输出。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!