2014-04-04 1 views
-2

안녕하세요, 내가 할 수있는 다른 사이트에서 데이터를 추출하려고하지만 문제는 내가 원하는 방식으로 내 데이터를 추출 할 수 없다는 것입니다. 목표를 달성 할 수있는 방법은 무엇입니까?정규식을 사용하여 다른 사이트에서 데이터를 추출하는 방법은 무엇입니까?

여기에 내가

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

가능한 중복 [웹 htmlunitsriver를 사용하여 긁어 작업을 수행하는 방법에?] 많은 계정이 어떻게 (http://stackoverflow.com/questions/22807527/how-to-do-web-scraping-using-htmlunitsriver) – Nadun

+1

를 있니? 왜 그런가요? – Nadun

+0

왜 내 계정이 7 일간 차단되어 있는지 알지 못합니다. – user3496498

답변

1

참고 : 정규식이 필요하지 않습니다. Selenium 자체는 테이블에서 데이터를 추출하는 데 유용한 도구를 제공합니다.

이것을 분석해 보겠습니다. 해당 웹 사이트의 출처를 보면 ... 여기에 그 방식이 정리되어 있습니다.

<table id="ctl00_ContentPlaceHolder1_GridView1"> 
    <tbody> 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
     ... more <trs> 
</table> 
  • 먼저 당신은 "테이블 행을"얻을.
  • findElementfindElements을 사용하여 수행됩니다.

위있어 List<WebElement> 요소의 각 통해

List<WebElement> tableRows = driver.findElement(By.id("ctl00_ContentPlaceHolder1_GridView1")).findElements(By.xpath(".//tbody/tr")); 
  • 이제 루프 (코드 아래, 당신의 코드에 따라 수정 한 예이다).

for (WebElement tableRow : tableRows) { 
... 
} 
  • 다음에, 각 테이블의 행 (4 개) 항목 (즉 4 테이블 셀)이를 이용하여 수행.
  • 위에 표시된대로 findElements을 다시 사용하십시오. List<WebElement>
  • 스토어이 (다시 전술 한 바와 같이)

번호 : 지금

tableRow.findElements(By.xpath(".//td") 
  • <td> WebElement 통해 루프.
  • 각 WebElement에서 .getText() 메서드를 호출하여 각 요소 내의 텍스트를 가져옵니다.
  • 필요에 따라 텍스트 출력의 서식을 지정하십시오.
+0

친애하는 우리가 할 수 있다면 그것은 매우 될 것입니다 나를 위해 도와주세요 – user3496498

+1

나는 당신의 대답에 이미 대답했다고 믿습니다. StackOverflow에서는 자신 만의 작업을 수행 할 것으로 예상됩니다. – Vish

+0

동일한 작업을 수행하고 있지만 데이터가 추출되지 않습니다. – user3496498