2015-06-10 92 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

如果這不是爲你工作,我可以告訴你一個方法使用一個的HtmlUnit自定義HTTP請求來做到這一點。你還需要這個還是你解決了你的問題? – Arya

+0

我還沒有解決它,所以我很樂意在這方面得到任何幫助。謝謝! –

+0

我絕對還是需要這個。 –

回答

0

您可以使用GET請求執行此類任務。通過URL中的「pageCount」和「offset」參數控制頁面,在獲取頁面後(下面的示例對一個頁面執行此操作),可以使用正則表達式或任何內容(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? –

+0

這是直接調用AJAX頁面,你的URL通過AJAX獲取這個URL,所以我跳過了這個。它的工作正確嗎? – Arya

相關問題