【问题标题】:Getting Craigslist img src using JSoup使用 JSoup 获取 Craigslist img src
【发布时间】:2014-10-13 06:57:51
【问题描述】:

我目前正在尝试使用 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 标签之外的所有内容。

【问题讨论】:

    标签: android html http jsoup


    【解决方案1】:

    您提供的网址上的广告图片是在页面加载后使用 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,但出于性能考虑,我强烈反对这样做。

    【讨论】:

    • 我不敢相信我以前错过了这种模式。我确实在某一时刻查看了数据 ID,但我一定错过了相关性。谢谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2021-02-16
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多