使用JSoup获取Craigslist img src

时间:2014-10-13 06:57:51

标签: android html http jsoup

我目前正在尝试使用JSoup为Android应用程序解析Craigslist页面。这是我要解析的页面的URL:

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标记。

2 个答案:

答案 0 :(得分:3)

您加载的网址上的广告图片是在加载网页后使用JavaScript加载的,这就是为什么初始HTML源代码不包含任何img代码的原因。

但是,您发布的HTML结构中data-id元素的a属性与生成的src标记的img属性之间存在映射。例如,让我们考虑以下元素:

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

只需从data-id元素中检索a属性,删除冒号前的部分,最后添加_300x300.jpg,然后获取图像文件的名称。完整的URL然后变为:

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

因此,不要使用JSoup选择img元素,而是选择a元素,并根据data-id属性构建图片网址。

另一种解决方案是在WebView中加载页面以便JavaScript执行,但我强烈反对这种性能问题。

答案 1 :(得分:0)

我不是100%肯定,但看起来他们可能会拒绝服务器端的请求阻止人们做你正在做的事情。我在POSTMAN中看到的结果与你相同。

作为一种解决方法,您可以在webview中加载页面,然后注入javascript以返回整个<html>节点。以下是另一个SO问题的链接,其中还包括其他方法:how to get html content from a webview?