Таблицы парсинга Android JSOUP с веб-сайтов - PullRequest
0 голосов
/ 01 февраля 2012

У меня проблема с анализом следующего веб-сайта:

http://www.x -rates.com / d / USD / table.html

Я оченьЯ очень плохо знаком с программированием на Android, и я думаю о создании конвертера валют, теперь я знаю, что есть куча вещей, однако я пытаюсь быстро отследить свое начало программирования и погрузиться в код.

Я нашел учебник, который пытался объяснить, и он был полезен для веб-сайта с необходимостью определенного элемента.код ниже:

package com.ve.webgrab;

import java.io.IOException;
import java.util.ArrayList;
import android.app.ListActivity;
import android.os.Bundle;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.view.View;

public class WebgrabActivity extends ListActivity {

public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

ArrayList<String> tableRowStrings = new ArrayList<String>();

Document doc = null;
        try {
            doc = Jsoup.connect("http://www.x-rates.com/d/USD/table.html").get();
        } 
        catch (IOException e) {
            e.printStackTrace();
        }

       String testString  = "American";
        Elements tableRows = doc.select("tr");
        for (Element tableRow : tableRows){
             if (tableRow.hasText()){
                    String rowData = tableRow.text();
                    if(rowData.contains(testString)){
                            tableRowStrings.add(rowData);
                }
          }
    } 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tableRowStrings);
        setListAdapter(adapter);
  }

@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
    }
}

Мне нужно иметь возможность получить таблицу с usd в другой валюте, чтобы иметь ее в базе данных и затем использовать для конвертации.Я считаю, что раздел, на который мне нужно обратить внимание:

       String testString  = "American";
        Elements tableRows = doc.select("tr");
        for (Element tableRow : tableRows){
             if (tableRow.hasText()){
                    String rowData = tableRow.text();
                    if(rowData.contains(testString)){
                            tableRowStrings.add(rowData);
                }
          }
    } 

Что мне нужно сделать:

  • Получить веб-сайт: - - Я считаю, что это выполнено: -

            doc = Jsoup.connect("http://www.x-rates.com/d/USD/table.html").get();
    
  • Выберите таблицу на веб-сайте с особым интересом к коэффициенту конверсии: - Все еще не можете понять эту часть.

  • Проверьте таблицу, чтобы убедиться, что она правильная:

       String testString  = "American";
    
                    if(rowData.contains(testString)){
    
  • Возьмите данные из таблицы и отобразите в виде списка, чтобы убедиться, что собраны правильные данные:

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tableRowStrings);
        setListAdapter(adapter);
    
  • Разбейте таблицу <td> на страну и коэффициент конверсии, а затем поместите ее в базу данных.

ЯВ поисках руководства, пожалуйста, помните, что я совершенно новичок в этом, и я хочу создать это приложение для обучения и трамплина для больших и лучших приложений, пример кода, безусловно, приветствуется, я был бы признателен за любую помощь, которую я могу получить.

Ответы [ 2 ]

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

Я проголосовал за ответ Марвина, потому что использование веб-сервиса, предоставляемого Yahoo, вероятно, будет более надежным в долгосрочной перспективе.

Однако я выбрал для вас базовое решение, используя другой веб-сайт. Вы можете видеть, сколько кода требуется меньше, когда сайт использует классы и идентификаторы, чтобы помочь вам выбрать правильные вещи, а не перебирать все элементы и искать определенные вещи, чтобы найти нужную информацию. Вам нужно будет немного исправить этот код, чтобы проверить наличие ошибок и удовлетворить ваши потребности, но это должно помочь вам начать работу, если вы все еще хотите пойти по этому пути.

    //Get the HTML from the source
    Document doc = Jsoup.connect("http://www.exchangerate.com/").get();
    //select all the tr elements within the tbody elements within
    //the table with class name table_text_small
    //and iterate over all of those elements
    for (Element e : doc.select("table.table_text_small > tbody > tr")) {
        //this is a little hackish, but check to make sure this tr has
        //at least 5 children (tds)
        if (e.children().size() >= 5) {
            //if so, print out the 1st child (country name)
            //and the 5th child (exchange rate)
            System.out.println(e.child(1).text() + ":" + e.child(4).text());
        }
    }
1 голос
/ 02 февраля 2012

Если все, что вам нужно - это конвертация валюты , я бы порекомендовал вам использовать (бесплатный) Yahoo API для этого.Вы можете прочитать все подробности в этом ответе, но, по сути, вы получите что-то вроде следующего:

http://download.finance.yahoo.com/d/quotes.csv?s=GBPEUR=X&f=sl1d1t1ba&e=.csv

, что приведет к конвертации из GBP в EURи создать легко разбираемый текстовый файл.Как уже заметил @ B.Anderson, использование JSoup на этом веб-сайте будет довольно сложным делом.

...