【发布时间】:2014-06-19 18:11:01
【问题描述】:
我正在尝试从网页中的表格中提取数据,但我一直在提取相同的信息。例如,我将每部电影都放在一个数组列表中,但我想将每部电影与相关的表数据进行匹配。问题是,每个表都有相同的类名。我可以打印每部电影的标题,但我只是在提取 MovieOne 的表格信息。以下是电影一和二的 HTML 示例:
<TH CLASS="ddtitle">MovieOne</TH>
<TABLE CLASS="datadisplaytable" ><CAPTION class="captiontext">Movies</CAPTION>
<TR>
<TH CLASS="ddheader" scope="col" >Genre</TH>
<TH CLASS="ddheader" scope="col" >Time</TH>
<TH CLASS="ddheader" scope="col" >Days</TH>
<TH CLASS="ddheader" scope="col" >Where</TH>
<TH CLASS="ddheader" scope="col" >Date Range</TH>
<TH CLASS="ddheader" scope="col" >Seating</TH>
<TH CLASS="ddheader" scope="col" >Actors</TH>
</TR>
<TR>
<TD CLASS="dddefault">Action</TD>
<TD CLASS="dddefault">10:00 am - 12:00 pm</TD>
<TD CLASS="dddefault">SMTWTHFSA</TD>
<TD CLASS="dddefault">AMC Showplace</TD>
<TD CLASS="dddefault">Aug 20, 2014 - Sept 12, 2014</TD>
<TD CLASS="dddefault">Reservations</TD>
<TD CLASS="dddefault">Will Ferrel (<ABBR title= "Primary">P</ABBR>) target="Will Ferrel" ></TD>
</TR>
</TABLE>
<TH CLASS="ddtitle">MovieTwo</TH>
<TABLE CLASS="datadisplaytable" ><CAPTION class="captiontext">Movies</CAPTION>
<TR>
<TH CLASS="ddheader" scope="col" >Genre</TH>
<TH CLASS="ddheader" scope="col" >Time</TH>
<TH CLASS="ddheader" scope="col" >Days</TH>
<TH CLASS="ddheader" scope="col" >Where</TH>
<TH CLASS="ddheader" scope="col" >Date Range</TH>
<TH CLASS="ddheader" scope="col" >Seating</TH>
<TH CLASS="ddheader" scope="col" >Actors</TH>
</TR>
<TR>
<TD CLASS="dddefault">Action</TD>
<TD CLASS="dddefault">11:00 am - 12:30 pm</TD>
<TD CLASS="dddefault">SMTWTHFSA</TD>
<TD CLASS="dddefault">Showplace Cinemas</TD>
<TD CLASS="dddefault">Aug 20, 2014 - Sept 12, 2014</TD>
<TD CLASS="dddefault">TBA</TD>
<TD CLASS="dddefault">Zach Galifinakis (<ABBR title= "Primary">P</ABBR>) target="Zach Galifinakis" ></TD>
</TR>
</TABLE>
这是我一直在尝试的(由 Praveen 提供,来自我的另一个问题 Extract Text from BR tags):
WebElement table =driver.findElement(By.xpath("//table[@class='datadisplaytable']"));
WebElement tbody=table.findElement(By.tagName("tbody"));
List<WebElement> rows=tbody.findElements(By.tagName("tr"));
System.out.println("Row size:"+rows.size());
ArrayList<String> list=new ArrayList<>();
for(int i=0;i<rows.size();i++)
{
WebElement column = tbody.findElement(By.xpath("//table[@class='datadisplaytable']/tbody/tr[2]/td"));
if(column.getText().trim().contains("."))
{
System.out.println("text : "+column.getText().trim());
list.add(column.getText().trim());
}
}
我还能够以字符串形式获取表格信息,但我需要将每个表格元素分开。我可以使用子字符串,但信息会有所不同,因此字符串长度也会有所不同。我应该使用 xpath 来提取信息,还是有其他方法?
【问题讨论】:
-
这真的是真正的 HTML 吗?似乎无效。
-
不,但它是它的一个例子。网页很大,如果我要发布整个内容,它会太长,为了缩短它,我必须以一种无论如何都无效的方式剪切和粘贴它。