Как разобрать страницу с несколькими таблицами - PullRequest
0 голосов
/ 08 февраля 2012

Есть идеи, как очистить веб-страницу с несколькими таблицами?Я подключаюсь к веб-странице

Это одна таблица, но на одной веб-странице есть несколько таблиц

Я также не могу понять, как читать таблицу ...

XML:

    <p><a href="/fantasy_news/feature/?ID=49818"><strong>Top 300 Overall Fantasy Rankings</strong></a></p> 
<div class="storyStats"> 
<table> 
<thead> 
<tr> 
<th>RANK</th> 
<th>CENTRES</th> 
<th>TEAM</th> 
<th>POS</th> 
<th>GP</th> 
<th>G</th> 
<th>A</th> 
<th>PTS</th> 
<th>+/-</th> 
<th>PIM</th> 
<th>PPP</th> 
</tr> 
</thead> 
<tbody> 
<tr class="bg1"> 
<td>1.</td> 
<td><a href="/nhl/teams/players/?name=steven+stamkos">Steven&nbsp;Stamkos</a></td> 

<td>Tampa Bay</td> 
<td>C</td> 
<td align="right">81</td> 
<td align="right">50</td> 
<td align="right">51</td> 
<td align="right">101</td> 
<td align="right">-2</td> 
<td align="right">56</td> 
<td align="right">38</td> 
</tr> 


Iterator<Element> trSIter = doc.select("table")
            .iterator();
    while (trSIter.hasNext()) {
        Element trEl = trSIter.next().child(0);
        Elements tdEls = trEl.children();
        Iterator<Element> tdIter = tdEls.select("tr").iterator();
        System.out.println("><1><><"+tdIter);
        boolean firstRow = true;
        while (tdIter.hasNext()) {

            Element tr = (Element) tdIter.next();


            while (tdIter.hasNext()) {
                int tdCount = 1;
                Element tdEl = tdIter.next();
                //name = tdEl.getElementsByClass("playertablePlayerName").get(0).text();

                Elements tdsEls = tdEl.select("td");
                System.out.println("><2><><"+tdsEls);
                Iterator<Element> columnIt = tdsEls.iterator();

                while (columnIt.hasNext()) {

                    Element column = columnIt.next();
                    switch (tdCount++) {
                    case 1:
                        name =column.select("a").first().text();

                        break;
                    case 2:
                        stat2 = Double.parseDouble(column.text());
                        break;
                    case 3:
                        stat3 = Double.parseDouble(column.text());
                        break;
                    case 4:
                        stat4 = Double.parseDouble(column.text());
                        break;
                    case 5:
                        stat5 = Double.parseDouble(column.text());
                        break;
                    case 6:
                        stat6 = Double.parseDouble(column.text());
                        break;
                    case 7:
                        stat7 = Double.parseDouble(column.text());
                        break;
                    case 8:
                        stat8 = Double.parseDouble(column.text());
                        break;

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

При использовании приведенного ниже кода, кажется, нет проблемы в разборе таблиц из HTML.

public class JsoupActivity extends Activity {
    Document doc;
    myHttpGet _myGet;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final TextView tv = (TextView)findViewById(R.id.tv1);
        _myGet = new myHttpGet();
        try {
            doc = _myGet.doHttpGet();
            Elements tdsEls = doc.getElementsByClass("storyStats");
            //tv.setText(tdsEls.get(0).child(0).text());
            tv.setText(String.valueOf(tdsEls.first().children().size()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private class myHttpGet {
        Document myDom;
        Connection myConnection;
        Response myResponse;
        public Document doHttpGet() {
            myConnection = Jsoup.connect("http://www.tsn.ca/fantasy_news/feature/?ID=49815");
            try {
                myResponse = myConnection.execute();
                try {
                    myDom = myResponse.parse();
                    return myDom;
                } catch (IOException e) {
                    Log.e("napster","Parse Error");
                }
            } catch (IOException e) {
                Log.e("napster","HTTP Error");
            }
            return myDom;
        }
    }

}

Код может отображать 5 в textView, который является количеством таблицу вас есть в этом HTML под классом storyStats .Если вам нужно продолжить анализ содержимого таблиц, вы можете назначить таблицы другому объекту Elements и продолжить его анализ.

Elements es = tdsEls.first().children();

Ответ Андерсона показывает, как анализировать его на предмет данных.Надеюсь, это поможет.

0 голосов
/ 09 февраля 2012

Это должно помочь вам начать. В каждой таблице есть пустая запись, которую вам придется учитывать. Вам также придется выяснить, какую статистику вы хотите и где они находятся в таблице. Вы получаете статистику с tds.get(). Дайте мне знать, как это работает для вас.

    Document doc = Jsoup.connect("http://www.tsn.ca/fantasy_news/feature/?ID=49815").get();

    for (Element table : doc.select("div.storyStats").select("table")) {
        for (Element row : table.select("tr")) {
            Elements tds = row.select("td");
            if (tds.size() > 0) {
                System.out.println(tds.get(1).text() + ":" + tds.get(5).text());
            }
        }
    }
...