2013-12-13 3 views
3

Я хочу получить данные с этого веб-сайта с помощью веб-соскабливания. http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx:Скребок экрана с использованием JSoup

enter image description here

Я использовал JSoup раньше для более статических HTML-сайтов, но это один сложнее, потому что, прежде чем я получаю таблицу HTML на сайте должны нажать одну кнопку, и я не знаю, если это можно использовать JSoup для управления кнопкой.

После нажатия этой кнопки я получаю таблицу HTML, я хочу получить данные только там, где модальность - Баржа.

Благодарим вас за советы по использованию Firefox, теперь у меня есть таблица с другой информацией о странице. Можете ли вы рассказать мне, как я могу получить только таблицу данных? Вывод, который я получаю следующим образом:

enter image description here

ответ

3

Вы должны будете использовать Selenium HTML динамиком для этого.

Selenium Info

Maven/Download Binary JAR

HTML Unit Driver

Вот полный рабочий example. Он посетит кнопку website, click, а затем вы можете получить data со страницы.

Edit: получить только табличное значение

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.support.ui.Select; 

public class GetData { 

    public static void main(String args[]) throws InterruptedException { 
     WebDriver driver = new FirefoxDriver(); 
     driver.get("http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx"); 
     Thread.sleep(5000); 
     // select barge 
     new Select(driver.findElement(By.id("ctl00_ctl15_g_ce17bd4b_3803_47f6_822a_2b8dd10fc67d_ctl00_dlModality"))).selectByVisibleText("Barge"); 
     // click button 
     Thread.sleep(3000); 
     driver.findElement(By.className("button80")).click(); 
     Thread.sleep(5000); 

     //get only table text 
     WebElement findElement = driver.findElement(By.className("grid-view")); 
     String htmlTableText = findElement.getText(); 
     // do whatever you want now, These are raw table values. 
     System.out.println(htmlTableText); 

     driver.close(); 
     driver.quit();  
    } 
} 
+0

Спасибо за код и ваш ответ, я очень благодарен, но я не получаю таблицу с этим кодом, я получаю источник страницы без таблицы, потому что я хочу получить только html-таблицу только там, где изменяется Баржа, спасибо. – Muratcan

+0

Попробуйте использовать FirefoxDriver вместо HtmlUnitDriver и посмотрите, работает ли это. – Makky

+0

Спасибо, у меня есть html-таблица, использующая с FirefoxDriver, но не могли бы вы рассказать мне, как я могу получить только таблицу не для всех источников страниц, я ставлю одно изображение, чтобы показать, что я имею в виду, я буду очень рад, если вы сможете как мне путь. Спасибо – Muratcan

0

Возможно браузер эмулятор Java будет полезно для вашей проблемы - пожалуйста, рассмотреть этот один - HtmlUnit.

Он моделирует HTML документов и предоставляет API, который позволяет вызывать страниц, заполнять формы, щелкать ссылки, и т.д. ... так же, как вы делаете в «нормальном» браузера .

HTMLUnit

2

Каждый «щелчок» (или любое взаимодействие такого рода) является запрос на сервер и ответ на браузер. Таким образом, возможным решением является не использование JSoup для начальной страницы, а для страницы результатов. Например, откройте POST на странице, которая возвращает таблицу, передав параметр, ответственный за возврат модальности Barge. Вы можете использовать такой инструмент, как Firebug (для Firefox) или Chrome Developer Tools, чтобы проверить, что такое разговор (запрос/ответ), чтобы вы могли эмулировать это с помощью собственного кода.

Смежные вопросы