Java JSoup跳过元素

Java JSoup跳过元素,java,android,httpresponse,jsoup,http-get,Java,Android,Httpresponse,Jsoup,Http Get,JSoup似乎跳过了HTML字符串中的一些元素。我100%肯定所有内容都在HTML字符串中,但当我选择要解析的元素时,JSoup只读取其中一些元素,或者根本不读取。但我知道他们存在。这是我的密码:谢谢: public void parseDoc() { final HttpParams params = new BasicHttpParams(); HttpClientParams.setRedirecting(params, true); HttpClient http

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) {
    }

}
public void parseDoc(){
最终HttpParams参数=新的基本HttpParams();
HttpClientParams.setRedirecting(params,true);
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(
"https://secure.groupfusion.net/processlogin.php");
字符串HTML=“”;
试一试{
List nameValuePairs=新的ArrayList(3);
添加(新的BasicNameValuePair(“参考页面”,
“/modules/gradebook/ui/gradebook.phtml?type=student_view”);
添加(新的BasicNameValuePair(“currDomain”),
“beardenhs.knoxschools.org”);
添加(新的BasicNameValuePair(“用户名”),用户名
.getText().toString());
添加(新的BasicNameValuePair(“密码”),密码
.getText().toString());
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HTML=EntityUtils.toString(response.getEntity());
Document doc=Jsoup.parse(HTML);
Element link=doc.select(“a”).first();
字符串linkHref=link.attr(“href”);
HttpGet请求=新建HttpGet();
试一试{
setURI(新URI(linkHref));
}捕获(URISyntaxException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
response=httpclient.execute(请求);
字符串html=“”;
InputStream in=response.getEntity().getContent();
BufferedReader reader=新的BufferedReader(
新的InputStreamReader(in);
StringBuilder str=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
str.append(行);
}
in.close();
HTML=str.toString();
doc=Jsoup.parse(HTML);
元素divs=doc.select(“div.yuiTop”);
用于(元素d:divs){
sting.append(d.text());
sting.append(“\n”);
}
}捕获(客户端协议例外e){
}捕获(IOE异常){
}
}

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


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

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


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

我已经发现了问题的根源,但我不知道如何解决它。我需要做的是从这个特定的页面中刮取表格,并将其打印到TextView。我知道我必须为此使用JSoup,但JSoup似乎无法找到页面上的每个元素。有什么想法吗?它找不到我需要的表,字符串总是返回空的。我只需要获取HTTPGEt的HTML。谢谢。你是说
linkHref
是空字符串吗?在这种情况下,您的
元素可能有一个空白的
href
属性。或者您选择了错误的元素,如果您对
href
元素有所了解,您可以缩小查询范围。例如,如果您知道链接应该来自“domain.com”,那么您可以查询“a[href*=domain.com]”。我已经将问题缩小为JSoup的问题。除了JSoup,所有的东西都在工作。由于某些原因,JSoup没有解析整个文档。我已经检查了HTML字符串,所有内容都在那里。就像JSoup跳过了一些元素。查看顶部我新修订的代码,看看我在尝试选择元素时是否看到错误。我已经发现了问题的根源,但我不知道如何修复它。我需要做的是从这个特定的页面中刮取表格,并将其打印到TextView。我知道我必须为此使用JSoup,但JSoup似乎无法找到页面上的每个元素。有什么想法吗?它找不到我需要的表,字符串总是返回空的。我只需要获取HTTPGEt的HTML。谢谢。你是说
linkHref
是空字符串吗?在这种情况下,您的
元素可能有一个空白的
href
属性。或者您选择了错误的元素,如果您对
href
元素有所了解,您可以缩小查询范围。例如,如果您知道链接应该来自“domain.com”,那么您可以查询“a[href*=domain.com]”。我已经将问题缩小为JSoup的问题。除了JSoup,所有的东西都在工作。由于某些原因,JSoup没有解析整个文档。我已经检查了HTML字符串,所有内容都在那里。就像JSoup跳过了一些元素。查看顶部我新修订的代码,看看我在尝试选择元素时是否看到错误。