gpt4 book ai didi

java - 提取具有相同类名的表数据

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:52 24 4
gpt4 key购买 nike

我正在尝试从网页中的表格中提取数据,但我不断提取相同的信息。例如,我将每部电影都放在数组列表中,但我想将每部电影与相关的表数据进行匹配。问题是,每个表都有相同的类名。我可以打印每个电影标题,但我只提取 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>

这是我一直在尝试的(由我的另一个问题 Extract Text from BR tags 中的 Praveen 提供):

 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 来提取信息,还是有其他方法?

最佳答案

我想我正确理解了你的问题。您想要从网页中的所有表格中读取电影的名称。

  1. 阅读所有表格
  2. 循环它们,并在表格的每一行中获取第二列(假设有电影名称)

我还没有在我的机器上测试过这个。这是您可以尝试的代码。

List<WebElement> tables = driver.findElements(By.className("ddtitle"));

foreach(WebElement table : tables){

List<WebElement> rows = table.findElements(By.tagName("TR"));

foreach(WebElement row : rows){
WebElement movieName = row.findElements(By.tagName("TD")).get(2); // column # in row
System.out.println(movieName);
}
}

关于java - 提取具有相同类名的表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com