Java 使用HtmlUnit以编程方式从HTML获取列表
我试图通过编程(用Java)提取与特定日期对应的文章列表(标题和URL链接),如图所示 结果会是这样的:Java 使用HtmlUnit以编程方式从HTML获取列表,java,html,dom,htmlunit,Java,Html,Dom,Htmlunit,我试图通过编程(用Java)提取与特定日期对应的文章列表(标题和URL链接),如图所示 结果会是这样的: Thursday, January 31, 2013 - Dollar Curbs Tumble Despite.... - http://finance.yahoo.com/news/dollar-curbs-tumble-despite-gdp-051100047.html Wednesday, January 30,2013 - [video] Santelli's Mid
Thursday, January 31, 2013
- Dollar Curbs Tumble Despite....
- http://finance.yahoo.com/news/dollar-curbs-tumble-despite-gdp-051100047.html
Wednesday, January 30,2013
- [video] Santelli's Midday Bond Report
- http://us.rd.yahoo.com/finance/external/video/cnbc/SIG=110mfa5qs/*http://video.cnbc.com/gallery/?video=3000144631&__source=yahoo%7Cheadline%7Cquote%7Cvideo%7C&par=yahoo
因此,如图所示,对于给定的日期,我试图使用HtmlUnit提取所有标题/链接
问题是:对于这项琐碎的任务,我对HTML/DOM的了解非常有限,如果有人能在这方面帮助我或为我指明正确的方向,我将不胜感激
多谢各位
编辑:
当检查页面时,我寻找的标签似乎包含在交替的“h3”和“ul”标签中。我只是不知道如何访问和遍历这些标记。尝试使用getElementsByTagName()以便获取所有的
和
SimpleDateFormatter dateParser = ...
List<DateAndTitle> result = new LinkedList();
Date lastDate = null;
// for(HtmlElement node : table.getHtmlElementDescendants()) {
for(HtmlElement node : findAllChildren(table)) {
if( "ul".equals( node.getTagName() ) ) {
String title = node.asText();
result.add(new DateAndTitle(lastDate, title);
}
if( "h3".equals( node.getTagName() ) ) {
String dateString = node.asText();
lastDate = dateParser.parse(dateString);
}
}
SimpleDataFormatterDateParser=。。。
列表结果=新建LinkedList();
Date lastDate=null;
//for(HtmlElement节点:table.GetHtmlElementdDescendats()){
for(HtmlElement节点:findAllChildren(表)){
if(“ul”.equals(node.getTagName())){
字符串title=node.asText();
结果.添加(新日期和标题)(最后日期,标题);
}
if(“h3”.equals(node.getTagName())){
String dateString=node.asText();
lastDate=dateParser.parse(日期字符串);
}
}
和helper func递归查找所有子代html节点:
private HtmlElement findAllChildren(DomNode parent) {
List<HtmlElement> result = new LinkedList();
for(DomNode child : parent.getChildren()) {
if( child instanceof HtmlElement ) {
result.add( (HtmlElement) child );
}
}
for(DomNode child : parent.getChildren) {
result.addAll( findAllChildren( child ) );
}
retutn result;
}
私有HtmleElement findAllChildren(DomNode父节点){
列表结果=新建LinkedList();
for(DomNode子节点:parent.getChildren()){
if(HtmlElement的子实例){
结果。添加((HtmleElement)子项);
}
}
for(DomNode子节点:parent.getChildren){
结果:addAll(findAllChildren(child));
}
复述结果;
}
只需学习。通过使用getFirstByXPath
或getByXPath
,您将得到一个1到4行的解决方案。它在页面中。谢谢您。我尝试了以下代码,似乎代码从未进入for循环。相反,我得到了以下输出:
private HtmlElement findAllChildren(DomNode parent) {
List<HtmlElement> result = new LinkedList();
for(DomNode child : parent.getChildren()) {
if( child instanceof HtmlElement ) {
result.add( (HtmlElement) child );
}
}
for(DomNode child : parent.getChildren) {
result.addAll( findAllChildren( child ) );
}
retutn result;
}