2015-06-10 3 views
0

Я пытаюсь извлечь данные для проекта класса с веб-страницы (страницы с результатами поиска). В частности, именно эта страница:HTMLUnit не работает с Ajax/Javascript

http://www.target.com/c/xbox-one-games-video/-/N-55krw#navigation=true&category=55krw&searchTerm=&view_type=medium&sort_by=bestselling&faceted_value=&offset=60&pageCount=60&response_group=Items&isLeaf=true&parent_category_id=55kug&custom_price=false&min_price=from&max_price=to

Я просто хочу, чтобы извлечь название продуктов.

Я использую следующий код:

final WebClient webClient = new WebClient(BrowserVersion.CHROME); 
webClient.getOptions().setThrowExceptionOnScriptError(false); 
webClient.getOptions().setJavaScriptEnabled(true); 
webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
final HtmlPage page = webClient.getPage(itemPageURL); 
int tries = 20; // Amount of tries to avoid infinite loop 
while (tries > 0) { 
    tries--; 
    synchronized(page) { 
     page.wait(2000); // How often to check 
    } 
} 
int numThreads = webClient.waitForBackgroundJavaScript(1000000l); 

PrintWriter pw = new PrintWriter("test-target-search.txt"); 
pw.println(page.asXml()); 
pw.close(); 

страница, которая приводит не имеет информации о продукте, который отображается на веб-браузере. Я думаю, что звонки AJAX не завершены? (не уверен, хотя.)

Любая помощь будет очень признательна. Благодаря!

+0

Если это не работает для вас, я могу показать вам способ сделать это с помощью пользовательского HTTP-запроса, используя HTMLUnit. Вам все еще нужно это или вы решили свою проблему? – Arya

+0

Я не решил это, поэтому я хотел бы помочь в этом. Благодаря! –

+0

Мне определенно все еще нужно это. –

ответ

0

Вы можете использовать запросы GET для выполнения такой задачи. Управляйте страницей с помощью аргумента «pageCount» и «offset» в URL-адресе, после извлечения страницы (пример ниже делает это для одной страницы) вы можете использовать регулярное выражение или любое другое содержимое (JSON?) Для извлечения названий.

public static void main(String[] args) 
{ 
    try 
    { 
     WebClient webClient = new WebClient(); 

     URL url = new URL(
       "http://tws.target.com/searchservice/item/search_results/v1/by_keyword?callback=getPlpResponse&navigation=true&category=55krw&searchTerm=&view_type=medium&sort_by=bestselling&faceted_value=&offset=60&pageCount=60&response_group=Items&isLeaf=true&parent_category_id=55kug&custom_price=false&min_price=from&max_price=to"); 
     WebRequest requestSettings = new WebRequest(url, HttpMethod.GET); 

     requestSettings.setAdditionalHeader("Accept", "*/*"); 
     requestSettings.setAdditionalHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
     requestSettings.setAdditionalHeader("Referer", "http://www.target.com/c/xbox-one-games-video/-/N-55krw"); 
     requestSettings.setAdditionalHeader("Accept-Language", "en-US,en;q=0.8"); 
     requestSettings.setAdditionalHeader("Accept-Encoding", "gzip,deflate,sdch"); 
     requestSettings.setAdditionalHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 

     Page page = webClient.getPage(requestSettings); 

     System.out.println(page.getWebResponse().getContentAsString()); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
+0

Как это отличается от того, что я сделал? –

+0

Кроме того, URL-адрес, который вы вызываете, отличается от того, с чего я пытался получить данные. Как/почему вы решили использовать этот URL? –

+0

Это вызывает страницу AJAX напрямую, ваш URL-адрес получает этот URL-адрес от AJAX, поэтому я пропустил это. Он работает правильно? – Arya

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