您好我正在尝试从其他网站提取数据,我能够做但问题是我想以我想要的格式提取我的数据,这是我无法实现的,所以我怎样才能实现我的目标
这是我做的代码
import com.gargoylesoftware.htmlunit.BrowserVersion;
import java.util.StringTokenizer;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.support.ui.Select;
import java.sql.*;
public class Getdata2 {
Statement st=null;
Connection cn=null;
public static void main(String args[]) throws InterruptedException, ClassNotFoundException, SQLException {
WebDriver driver = new HtmlUnitDriver(BrowserVersion.getDefault());
String sDate = "27/03/2014";
String url="http://www.upmandiparishad.in/commodityWiseAll.aspx";
driver.get(url);
Thread.sleep(5000);
new Select(driver.findElement(By.id("ctl00_ContentPlaceHolder1_ddl_commodity"))).selectByVisibleText("Jo");
driver.findElement(By.id("ctl00_ContentPlaceHolder1_txt_rate")).sendKeys(sDate);
Thread.sleep(3000);
driver.findElement(By.id("ctl00_ContentPlaceHolder1_btn_show")).click();
Thread.sleep(5000);
WebElement findElement = driver.findElement(By.id("ctl00_ContentPlaceHolder1_GridView1"));
String htmlTableText = findElement.getText();
// do whatever you want now, This is raw table values.
htmlTableText=htmlTableText.replace("S.No.DistrictMarketPrice","");
System.out.println(htmlTableText);
driver.close();
driver.quit();
}
}
我想像这样提取我的数据
1 Agra Achhnera NIL
2 Agra Agra NIL
3 Agra Fatehabad NIL
4 Agra FatehpurSikri NIL
5 Agra Jagner NIL
6 Agra Jarar NIL
7 Agra Khairagarh NIL
8 Agra Shamshabad NIL
9 Aligarh Atrauli NIL
10 Aligarh Chharra NIL
11 Aligarh Aligarh 1300.00
12 Aligarh Khair 1300.00
13 Allahabad Allahabad NIL
14 Allahabad Jasra NIL
15 Allahabad Leriyari NIL
16 Allahabad Sirsa NIL
17 AmbedkarNagar Akbarpur NIL
18 Ambedkar Nagar TandaAkbarpur NIL
如何实现我想要的输出
提前致谢
答案 0 :(得分:1)
注意:您不需要正则表达式。 Selenium本身提供了从表中提取数据的好工具。
让我们分析一下。查看该网站的来源......这是其安排的方式。
<table id="ctl00_ContentPlaceHolder1_GridView1">
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
... more <trs>
</table>
findElement
和findElements
完成的。 (下面的代码是一个例子,根据你的代码修改)
List<WebElement> tableRows = driver.findElement(By.id("ctl00_ContentPlaceHolder1_GridView1")).findElements(By.xpath(".//tbody/tr"));
List<WebElement>
元素。 您可以使用
执行此操作for (WebElement tableRow : tableRows) {
...
}
findElements
,如上所示。 List<WebElement>
(再次如上所示)代码:
tableRow.findElements(By.xpath(".//td")
<td>
WebElement。 .getText()
方法获取每个元素中的文本。