【问题标题】:Using Curl to get tables data使用 Curl 获取表格数据
【发布时间】:2017-01-21 21:20:16
【问题描述】:

我需要解析来自网站的数据,当我在命令行中运行它时,这个请求为我提供了我需要的 json,当我尝试将它转换为 Android 时,它不起作用:

我的要求:“curl 'http://billetterie.ctm.ma/site/select_voyages_aller?datev=21-01-2017&agen_dep=022&agen_dest=745&nbp=1&dater=21-01-2017&aller=AS&tpay=MA&q=1&_search=false&nd=1485004301429&rows=30&page=1&sidx=&sord=' -H '主机: billetterie.ctm.ma' -H '用户代理: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0' -H '接受:application/json, text/javascript, /; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'X-Requested-With: XMLHttpRequest' -H '引用者: http://billetterie.ctm.ma/site/get_voyages?nat=1&tov1=nat&aller=AS&ag_dep=022&ag_arr=745&datev=21-01-2017&dater=21-01-2017&nbp=1&tpay=MA&horr=non' -H 'Cookie: __utma=155676777.794288111.1468961313.1473110615.1483191519.26; __utmz=155676777.1472508246.19.2.utmcsr=billetterie.ctm.ma|utmccn=(推荐)|utmcmd=推荐|utmcct=/site/accueil_widget; SESSb32ad49581ba1927701cb25c04e30aae=VhEOkLJ2qmLrlxEW3sNRIFpnS0ZUYPGUwAyvVqui_9I; _ctm_site_session=BAh7BzoQX2NzcmZfdG9rZW4iMUJ1ZzFpN3JDdGlzaTJGZUZEY2F0SWZPK3hMOWhwWW1vSFJ5QnoyUXFWLzA9Og9zZXNzaW9uX2lkIiUwNmMxOTYxNGIzOTRmNzY2ZWY0YzkyYTVjNTc4MzQzYQ%3D%3D--59c0a57e5935d23668767649d8483155f719faf8' -H '连接:保持活动'";

我的 Java 代码是:

 public static String getRequest(String url) {
        StringBuffer stringBuffer = new StringBuffer("");
        BufferedReader bufferedReader = null;
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet();

            URI uri = new URI(url);
            httpGet.setURI(uri);


            HttpResponse httpResponse = httpClient.execute(httpGet);
            InputStream inputStream = httpResponse.getEntity().getContent();
            bufferedReader = new BufferedReader(new InputStreamReader(
                    inputStream));

            String readLine = bufferedReader.readLine();
            while (readLine != null) {
                stringBuffer.append(readLine);
                stringBuffer.append("\n");
                readLine = bufferedReader.readLine();
            }
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    // TODO: handle exception
                }
            }
        }
        return stringBuffer.toString();

    }

【问题讨论】:

  • 它解析什么?你在哪里初始化 url 变量?
  • 我在开始这个线程之前初始化了 url 变量,我发现只有标题和相同的段落而不是像我的导航器中的链接这样的表格,我希望我回答了你的问题
  • 似乎数据到表中是异步加载的。如果您打开链接,您可以看到加载程序。使用 jsoup,您无需等待异步调用,因此您的表为空或尚未创建
  • 是的,伙计,你是对的,所以看看我的编辑,告诉我你的想法

标签: android html parsing jsoup


【解决方案1】:

我认为你不能同步解析这个页面,这不是 JSOUP 问题或 HttpClient 问题。

我能想到的唯一方法是探索您的链接页面并让自己在该页面中异步完成请求。如果你需要的是表格内容,你需要解析的不是起始页。

您需要找到执行了什么异步调用以在浏览器上填充该表,进行该调用并尝试解析响应

【讨论】:

  • 但是兄弟,如果你运行上面的请求,你可以得到响应的json,现在问题是在android中运行curl
  • 我认为你应该使用 NDK 方法。或者也许是一些图书馆?
  • 好的,但对我来说,最简单的方法是只进行内部调用,因此您可以使用 JSOUP 及其出色的功能。是否过于复杂而无法确定要发出的正确请求?
  • 是的,你是对的,我真的被卡在这里了,因为这个 curl 请求有很多选项,如果你发现了什么,你能在这里评论吗?
  • 哦,好吧,我现在明白了:只请求表数据会产生 JSON,所以您正在寻找一种方法来解析这些数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2021-07-15
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
相关资源
最近更新 更多