2014-10-13 82 views
0

我目前正在嘗試使用JSoup爲Android應用程序解析Craigslist頁面。下面是URL的網頁,我試圖解析:使用JSoup獲取Craigslist img src

http://seattle.craigslist.org/search/sss?query=ford&sort=rel

當我檢查使用Chrome的元素,我可以看到,對於廣告的HTML結構如下:

<p class="row" data-pid="4711759405"> 
    <a href="/see/ctd/4711759405.html" class="i" data-id="0:00U0U_d4iR9oMNMBY"> 
     <img alt="" src="http://images.craigslist.org/00U0U_d4iR9oMNMBY_300x300.jpg"> 
    </a> 
    <span class="txt"> 
     <span class="star v" title="save this post in your favorites list"></span> 
     <span class="pl"> 
    .... 

使用JSoup,我能夠解析除img標記之外的所有內容。以下是我如何提出HTTP請求:

document = Jsoup.connect(url).get(); 
Elements images = document.select("img"); 

此方法只能找到2個圖像,其中沒有一個是廣告圖像。我還使用Chrome插件POSTMAN來複制HTTP GET請求,並且我發現沒有任何廣告的img標記。爲什麼會發生這種情況,我如何檢索img標籤的src URL?

請注意,我能夠檢索其他所有內容,但img標記。

回答

3

在您加載網頁後,您給出的URL上的廣告圖片使用JavaScript加載,這就是爲什麼最初的HTML源代碼不包含任何img標籤。

然而,在您發佈的HTML結構中的a元件的data-id屬性,並且將所生成img標籤的src屬性之間的映射。例如,讓我們考慮以下因素:

<a href="/see/ctd/4711759405.html" class="i" data-id="0:00U0U_d4iR9oMNMBY"> 

剛從a元素檢索data-id屬性,冒號之前刪除的部分,在末尾添加_300x300.jpg,你如果圖像文件中獲取的名稱。完整的URL就變成了:

http://images.craigslist.org/00U0U_d4iR9oMNMBY_300x300.jpg 

所以,而不是選擇與JSoup img元素,選擇a元素,並從他們data-id屬性構成圖像的URL。

另一種解決方案是將頁面加載到WebView中以便執行JavaScript,但是我強烈建議您不要在性能方面擔憂。

+0

我不敢相信我錯過了那種模式。我確實在一點看過數據ID,但我一定錯過了相關性。謝謝! – user1927638

0

我不是100%確定,但它看起來像他們可能會拒絕服務器端的請求,以阻止人們做你正在做的事情。我在POSTMAN看到了和你一樣的結果。

作爲解決方法,您可以在webview中加載頁面,然後注入javascript返回整個<html>節點。以下是另一個SO問題的鏈接,其中還包含其他方法:how to get html content from a webview?