【问题标题】:JSoup skipping elements AndroidJSoup 跳过元素 Android
【发布时间】:2011-12-11 21:27:13
【问题描述】:

JSoup 似乎跳过了我的 HTML 字符串中的一些元素。我 100% 肯定 HTML 字符串中的所有内容,但是当我选择要解析的元素时,JSoup 只会读取其中的一些元素,或者根本不读取。但我知道它们存在。这是我的代码:谢谢:

public void parseDoc() {
    final HttpParams params = new BasicHttpParams();
    HttpClientParams.setRedirecting(params, true);
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(
            "https://secure.groupfusion.net/processlogin.php");
    String HTML = "";
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
        nameValuePairs.add(new BasicNameValuePair("referral_page",
                "/modules/gradebook/ui/gradebook.phtml?type=student_view"));
        nameValuePairs.add(new BasicNameValuePair("currDomain",
                "beardenhs.knoxschools.org"));
        nameValuePairs.add(new BasicNameValuePair("username", username
                .getText().toString()));
        nameValuePairs.add(new BasicNameValuePair("password", password
                .getText().toString()));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpclient.execute(httppost);

        HTML = EntityUtils.toString(response.getEntity());
        Document doc = Jsoup.parse(HTML);
        Element link = doc.select("a").first();
        String linkHref = link.attr("href");
        HttpGet request = new HttpGet();
        try {
            request.setURI(new URI(linkHref));
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        response = httpclient.execute(request);
        String html = "";
        InputStream in = response.getEntity().getContent();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(in));
        StringBuilder str = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            str.append(line);
        }
        in.close();
        HTML = str.toString();
        doc = Jsoup.parse(HTML);
        Elements divs = doc.select("div.yuiTop");
        for (Element d: divs) {
            sting.append(d.text());
            sting.append("\n");
        }


    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }

}

【问题讨论】:

    标签: java android httpresponse jsoup http-get


    【解决方案1】:

    这里有点奇怪的代码...所以我认为这是在进行查询,结果将返回一个超链接列表,并且您正在屏幕抓取第一个超链接的结果,然后您正在尝试加载第二个链接的内容?好吧,您确定服务器正在返回有效的超链接吗?尝试在浏览器中加载页面。

    如果它有效,那么我不确定问题是什么,但你为什么不使用WebView.loadUrl(),让浏览器组件来处理它?

    【讨论】:

    • 我已经找到了问题的根源,但我不知道如何解决它。我需要做的是从这个特定页面中抓取表格并将其打印到 TextView。我知道我必须为此使用 JSoup,但似乎 JSoup 无法找到页面上的每个元素。任何想法?找不到我需要的表,字符串总是返回空。
    • 我只需要获取HTTPGET的HTML。谢谢。
    • 你的意思是linkHref是一个空字符串吗?在这种情况下,您的 &lt;a&gt; 元素可能有一个空白的 href 属性。或者您可能选择了错误的元素,如果您对 href 元素有所了解,您可以缩小查询范围。例如,如果您知道链接应该来自“domain.com”,那么您可以查询“a[href*=domain.com]”。
    • 我已将问题缩小到 JSoup 的问题。现在一切正常,除了 JSoup。由于某种原因,JSoup 没有解析整个文档。我检查了 HTML 字符串,一切都在那里。就像 JSoup 跳过了一些元素。在顶部查看我新修订的代码,看看您是否在我尝试选择元素时看到错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多