2

我正在尝试使用 Android/Java/JSoup 从网站上抓取一些数据,但我无法使用下面显示的 url 中的表数据更新我的 textview。

我相信我在实现 JSOUP 以解析表数据方面几乎做了所有正确的事情,但是由于某些奇怪的原因,当我执行以下操作时,我仍然无法查看我试图获取的数据:

资源:

package com.example.test;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView tv;
    final String URL = "http://sheriff.org/apps/arrest/results.cfm?lname=&fname=";lname=&fname=";
String tr;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.TextView01);
        new MyTask().execute(URL);
    }

    private class MyTask extends AsyncTask<String, Void, String> {
        ProgressDialog prog;
        String title = "";

        @Override
        protected void onPreExecute() {
            prog = new ProgressDialog(MainActivity.this);
            prog.setMessage("Loading....");
            prog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            try {
                Document doc = Jsoup.connect(params[0]).get();
                Elements tableElement = doc.select(".datagrid");
                Element th = doc.select("tr").first();
                Element firstTh = th.select("th").first();
                title = firstTh.text();
        }   catch (IOException e) {
                e.printStackTrace();
            }
            return title;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            prog.dismiss();
            tv.setText(result);
        }
    }
}
4

3 回答 3

0

我想我可以为你做解析。至少它适用于Java。只需将 System.out.println 部分更改为其他内容,即可在 UI 上显示数据。您可以使用 cells.get(i) 来获取表格单元格的内容。

    try {
        doc = Jsoup.connect(params[0]).get();
        Element tableElement = doc.select(".datagrid").first();

        Elements tableRows = tableElement.select("tr");
        for (Element row : tableRows) {
            Elements cells = row.select("td");
            if (cells.size() >0) {
                System.out.println(cells.get(0).text()+"; "+cells.get(1).text()+"; "+cells.get(2).text()+"; "+cells.get(3).text());
            }
        }


    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2013-10-04T22:20:40.947 回答
0

这可能是您的问题:

final String URL = "http://http://sheriff.org/apps/arrest/results.cfm?lname=&fname=";

尝试:

final String URL = "http://sheriff.org/apps/arrest/results.cfm?lname=&fname=";
于 2013-10-04T17:57:51.087 回答
0

这是因为您的网址错误:

final String URL = "http://sheriff.org/apps/arrest/results.cfm?lname=&fname=";lname=&fname=";

它应该更改为

String url = "http://sheriff.org/apps/arrest/results.cfm?lname=FOO&fname=BAR";

这是您必须搜索的参数名称和姓氏:

lname=FOO&fname=BAR;

如果你改变它,它会起作用,如果你想试试这个进行测试:

http://sheriff.org/apps/arrest/results.cfm?lname=&fname=bob
于 2013-10-04T22:45:42.290 回答