如何使用正则表达式从其他网站提取数据?

时间:2014-04-04 06:26:25

标签: java regex selenium htmlunit-driver

您好我正在尝试从其他网站提取数据,我能够做但问题是我想以我想要的格式提取我的数据,这是我无法实现的,所以我怎样才能实现我的目标

这是我做的代码

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

如何实现我想要的输出

提前致谢

1 个答案:

答案 0 :(得分:1)

注意:您不需要正则表达式。 Selenium本身提供了从表中提取数据的好工具。

让我们分析一下。查看该网站的来源......这是其安排的方式。

<table id="ctl00_ContentPlaceHolder1_GridView1">
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        ... more <trs>
</table>
  • 首先你得到&#34;表格行&#34;。
  • 这是通过findElementfindElements完成的。

(下面的代码是一个例子,根据你的代码修改)

List<WebElement> tableRows = driver.findElement(By.id("ctl00_ContentPlaceHolder1_GridView1")).findElements(By.xpath(".//tbody/tr"));
  • 现在循环遍历上面提到的每个List<WebElement>元素。

您可以使用

执行此操作
for (WebElement tableRow : tableRows) {
...
}
  • 接下来,每个表行有4个条目(即4个表格单元格)。
  • 再次使用findElements,如上所示。
  • 将其存储在List<WebElement>(再次如上所示)

代码:

tableRow.findElements(By.xpath(".//td")
  • 现在,遍历每个<td> WebElement。
  • 通过在每个WebElement上调用.getText()方法获取每个元素中的文本。
  • 根据需要设置文本输出格式。