【问题标题】:How to scrape data from a table with dynamic values?如何从具有动态值的表中抓取数据?
【发布时间】:2016-06-14 14:38:26
【问题描述】:

这可能具有挑战性,因为网站的建设者似乎试图阻止这一点。

我正在尝试构建一个简单的应用程序来查看网站表中的一些数据。该表位于此处:

http://www.cepteteb.com.tr/doviz-kurlari

但是,表格数据似乎是在页面加载后加载的,所以当我尝试获取表格的 HTML 时,它是空的。如何获取包含数据的表格?

我正在使用 JSOUP 抓取表格。

private class GetData extends AsyncTask<String, Void, Element> {

        @Override
        protected Element doInBackground(String... params) {
            try {
                Document document = Jsoup.connect(params[0]).get();
                Log.e("Yiit",document+"");
                Element table = document.getElementById("dovizTablo");
                return table;
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Element element) {
            super.onPostExecute(element);
            Log.e("Yiit",element+"");
            tvMain.setText(element+"");
        }
    }

结果:

<table class="prices prices2" id="dovizTablo"> 
<thead> 
<tr> 
<th>D&ouml;viz Adı</th> 
<th>CEPTETEB Alış</th> 
<th>CEPTETEB Satış</th> 
</tr> 
</thead> 
<tbody> 
</tbody> 
</table>

预期行为:

<table class="prices prices2" id="dovizTablo">
                            <thead>
                                <tr>
                                    <th>Döviz Adı</th>
                                    <th>CEPTETEB Alış</th>
                                    <th>CEPTETEB Satış</th>
                                </tr>
                            </thead>
                            <tbody>
                            <tr><td>USD</td><td>2.9096 TL</td><td>2.9908 TL</td></tr><tr><td>EUR</td><td>3.1555 TL</td><td>3.2435 TL</td></tr><tr><td>GBP</td><td>4.0558 TL</td><td>4.1688 TL</td></tr></tbody>
                        </table>

【问题讨论】:

  • 尝试使用 Xpath -- stackoverflow.com/questions/7085539/does-jsoup-support-xpath -- 例如 (//*[@id="dovizTablo"]/tbody/tr[1]/td[1]) -- 如何获取 Xpath -- youtube.com/watch?v=vCNLPHP3E_U
  • 所以如果我理解正确的话,xpath 是用来轻松访问所需元素的。但是,我导航到表格没有问题,它只是空的。所以 xpath 可能无论如何都不会有帮助。
  • 您可能是对的,因为这听起来像是时间问题。 Xpath 获取元素内部的内容。您是否尝试过在刮之前延迟 2 到 3 秒?

标签: java android html web-scraping


【解决方案1】:

您提供的这个网站使用 javascript 初始化数据。你不能用 Jsoup 刮掉它。

我可以想出两种方法来抓取这个页面

  1. 使用WebView 访问页面并运行一些js 到 解析你想要的并返回到主应用程序。 阅读this如何实现。

  2. 创建一个可以解析并返回来自该站点的数据的 Web 服务。

【讨论】:

  • 你能给我指出一些关于如何创建上述网络服务的例子吗?我在网络开发方面不是很有经验。
  • 如果你有一个网络服务器,那么你可以创建一个网页应用来抓取页面。这可能会帮助你。 nrabinowitz.github.io/pjscrape
  • 不幸的是我没有,但我如何测试这是否有效?
  • 当我尝试在 webview 中加载页面时,表格的内容没有加载。那么也许他们以某种方式阻止了不寻常的浏览器?
  • @user2741186 如果更改user-agent 会怎样? stackoverflow.com/questions/5586197/android-user-agent
【解决方案2】:

网站的建设者似乎试图阻止这一点。

那你为什么要抓取数据??

相反,我建议您寻找其他公开提供所需数据的来源。

您还可以检查您的目标网站是否提供 API。

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多