如何使用jsoup读取表中的所有元素

时间:2015-03-21 12:59:30

标签: android jsoup

我正在尝试使用Jsoup读取HTML中表格的所有行。我的问题是我只读了表中的一些元素,但没有所有的元素,我不知道问题出在哪里。在桌子里面我有大约10个元素,我只能阅读6个,好奇的是我无法阅读这三个元素,也是最后一个元素之一。

这是我的代码:

public class MainActivity extends ActionBarActivity {

    ListView listview;
    ListViewAdapter adapter;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    static String EVENTO = "evento";
    static String HORARIO = "fecha/hora";
    // URL Address
    String url = "http://www.eliberico.com/agenda";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from listview_main.xml
        setContentView(R.layout.listview_main);
        // Execute DownloadJSON AsyncTask
        new JsoupListView().execute();

    }

    // Title AsyncTask
    private class JsoupListView extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Create a progressdialog
            mProgressDialog = new ProgressDialog(MainActivity.this);
            // Set progressdialog title
            mProgressDialog.setTitle("Descargando Agenda");
            // Set progressdialog message
            mProgressDialog.setMessage("Buscando...");
            mProgressDialog.setIndeterminate(false);
            // Show progressdialog
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            // Create an array
            arraylist = new ArrayList<HashMap<String, String>>();

            try {
                // Connect to the Website URL
                Document doc = Jsoup.connect(url).get();
                // Identify Table Class "worldpopulation"
                    for (Element table : doc.select("div[class=css-events-list]"))
                {
                    // Identify all the table row's(tr)
                    for (Element row : table.select("tr:gt(0)")) {
                        HashMap<String, String> map = new HashMap<String, String>();

                        // Identify all the table cell's(td)
                        Elements tds = row.select("td");


                        // Retrive Jsoup Elements
                        // Get the td's
                        map.put("fecha/hora", tds.get(0).text());
                        map.put("evento", tds.get(1).text());

                        arraylist.add(map);
                    }
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // Locate the listview in listview_main.xml
            listview = (ListView) findViewById(R.id.listview);
            // Pass the results into ListViewAdapter.java
            adapter = new ListViewAdapter(MainActivity.this, arraylist);
            // Set the adapter to the ListView
            listview.setAdapter(adapter);
            // Close the progressdialog
            mProgressDialog.dismiss();
        }
    }

}

这是HTML的一部分

<div class='css-events-list'><h2>nov 2014</h2><table cellpadding="0" cellspacing="0" class="events-table" >
    <thead>
        <tr>
            <th class="event-time" width="150">Fecha/Hora</th>
            <th class="event-description" width="*">Evento</th>
        </tr>
    </thead>
    <tbody><tr>
            <td>
                11/11/2014 - 26/04/2015<br/>
                10:00 am - 5:45 pm
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/women-fashion-power-en-londres" title="Women Fashion Power en Londres">Women Fashion Power en Londres</a>
                <br/><i>Design Museum, London  London</i>
            </td>
        </tr></tbody></table><h2>ene 2015</h2><table cellpadding="0" cellspacing="0" class="events-table" >
    <thead>
        <tr>
            <th class="event-time" width="150">Fecha/Hora</th>
            <th class="event-description" width="*">Evento</th>
        </tr>
    </thead>
    <tbody><tr>
            <td>
                03/01/2015 - 12/04/2015<br/>
                Todo el día
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/la-exposicion-art-brick-llega-londres" title="La exposición Art of the Brick llega a Londres">La exposición Art of the Brick llega a Londres</a>
                <br/><i>Old Truman Brewery, London </i>
            </td>
        </tr></tbody></table><h2>feb 2015</h2><table cellpadding="0" cellspacing="0" class="events-table" >
    <thead>
        <tr>
            <th class="event-time" width="150">Fecha/Hora</th>
            <th class="event-description" width="*">Evento</th>
        </tr>
    </thead>
    <tbody><tr>
            <td>
                03/02/2015 - 09/05/2015<br/>
                12:00 am
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/almodovar-y-su-musical-en-londres" title="Almodóvar y su musical en Londres">Almodóvar y su musical en Londres</a>
                <br/><i>The Playhouse Theatre, London London</i>
            </td>
        </tr><tr>
            <td>
                04/02/2015 - 31/08/2015<br/>
                Todo el día
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/elvis-presley-llega-londres-en-forma-de-exposicion" title="Elvis Presley llega a Londres en forma de exposición">Elvis Presley llega a Londres en forma de exposición</a>
                <br/><i>O2 Arena, London London</i>
            </td>
        </tr><tr>
            <td>
                07/02/2015 - 31/03/2015<br/>
                10:00 am - 5:30 pm
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/exposicion-fotografias-de-naturaleza-salvaje" title="Exposición fotografías de naturaleza salvaje">Exposición fotografías de naturaleza salvaje</a>
                <br/><i>Natural History Museum, London  </i>
            </td>
        </tr><tr>
            <td>
                09/02/2015 - 10/04/2015<br/>
                Todo el día
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/una-exposicion-del-pintos-barroco-rubens-llega-londres" title="Una exposición del pintor barroco Rubens llega a Londres">Una exposición del pintor barroco Rubens llega a Londres</a>
                <br/><i>Royal Academy of Arts, London </i>
            </td>
        </tr><tr>
            <td>
                20/02/2015 - 02/04/2015<br/>
                Todo el día
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/arte-urbano-spanish-101" title="Arte urbano ‘Spanish 101’">Arte urbano ‘Spanish 101’</a>
                <br/><i>MYA GALLERY, London London</i>
            </td>
        </tr><tr>
            <td>
                26/02/2015 - 25/05/2015<br/>
                10:00 am - 5:30 pm
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/exposicion-witches-old-women-album" title="Exposición: The Witches and old Women Album">Exposición: The Witches and old Women Album</a>
                <br/><i>The Courtauld Gallery, London London</i>
            </td>
        </tr></tbody></table><h2>mar 2015</h2><table cellpadding="0" cellspacing="0" class="events-table" >
    <thead>
        <tr>
            <th class="event-time" width="150">Fecha/Hora</th>
            <th class="event-description" width="*">Evento</th>
        </tr>
    </thead>
    <tbody><tr>
            <td>
                06/03/2015 - 17/04/2015<br/>
                12:00 am
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/battersea-spanish-organiza-talleres-de-escritura-en-espanol" title="Battersea Spanish organiza talleres de escritura en español">Battersea Spanish organiza talleres de escritura en español</a>
                <br/><i>Battersea Business Centre, London London</i>
            </td>
        </tr><tr>
            <td>
                12/03/2015 - 21/03/2015<br/>
                10:00 am - 5:00 pm
            </td>
            <td>
                <a href="http://www.eliberico.com/eventos/roman-lokati-expone-en-la-mall-galleries" title="Roman Lokati expone en la Mall Galleries">Roman Lokati expone en la Mall Galleries</a>
                <br/><i>Mall Galleries, London London</i>
            </td>
        </tr></tbody></table>

1 个答案:

答案 0 :(得分:0)

table.select("tr:gt(0)")可能不会按照您的想法行事。

如果你想避免

tr中的

thead但希望仅查找来自tbody的内容,例如此处

<thead>
    <tr>
        <th class="event-time" width="150">Fecha/Hora</th>
        <th class="event-description" width="*">Evento</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>
            11/11/2014 - 26/04/2015<br/>
            10:00 am - 5:45 pm
        </td>
        <td>
            <a href="http://www.eliberico.com/eventos/women-fashion-power-en-londres" title="Women Fashion Power en Londres">Women Fashion Power en Londres</a>
            <br/><i>Design Museum, London  London</i>
        </td>
    </tr>

然后考虑改变

for (Element table : doc.select("div[class=css-events-list]"))
{
    // Identify all the table row's(tr)
    for (Element row : table.select("tr:gt(0)")) {

进入

for (Element table : doc.select("div[class=css-events-list] > table > tbody")) 
{
    for (Element row : table.select("tr")) {