Как я могу разобрать определенные данные таблицы, используя jsoup? - PullRequest
0 голосов
/ 04 июля 2018

Я занимаюсь разработкой небольшого проекта, в котором я пытаюсь проанализировать обновленные рыночные цены на зерновые культуры из таблицы по этой ссылке:
http://amis.pk/ViewPrices.aspx?searchType=1&commodityId=1

Я хочу получить вывод, например, Apple (ammre): 12500

Код, который я использую:

public class MainActivity extends AppCompatActivity {
    private String url="http://amis.pk/ViewPrices.aspx?searchType=1&commodityId=1";
    TextView datatv;
    Button btn;

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

        datatv=(TextView)findViewById(R.id.tv);
        btn=(Button)findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.CUPCAKE)
            @Override
            public void onClick(View view) {
               new Description().execute();
            }
        });
    }

    @TargetApi(Build.VERSION_CODES.CUPCAKE)
    private class Description extends AsyncTask<Void, Void, Void> {
        StringBuilder s=new StringBuilder();
        String title;

        @Override
        protected Void doInBackground(Void... params) {
            try {

Document mBlogDocument = Jsoup.connect(url).get();

                Log.e("Activity Log", "doInBackground"+mBlogDocument.toString());
Elements table = mBlogDocument.getElementsByClass("table.cart");
Elements tdsInSecondRow = mBlogDocument.select("table tr:nth-child(2) > td");
                 for (Element td : tdsInSecondRow)
                {
                   System.out.println("TD: " + td.text());
                }
s.append(table);
                s.append(tdsInSecondRow);


            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

Этот код возвращает мне полный html данных таблицы во второй строке, но как я могу получить только данные из 4-го столбца (максимальная цена), относящиеся к яблоку (ammre)? Я понятия не имею об этом. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 июля 2018

Этот код получает все строки таблицы и печатает их одну за другой:

Document document = Jsoup.connect(url).get();
Elements rows = document.select("#amis_prices").select("tr:not(.labelLists)");
for (Element row : rows) {
    String name = row.select(".listItem").text();
    String maxPrice = row.select(".pricedata:nth-of-type(3)").text();
    System.out.println(name + ": " + maxPrice); // or what is appropriate in your code
}

Обратите внимание, что если вы кодируете для Android, замените последнюю строку System.out... на то, что соответствует вашему коду - например, button.setText(name + maxPrice) или ...

Если вы просто хотите получить второй ряд, вот как вы это сделаете:

Document document = Jsoup.connect(url).get();
Elements row = document.select("#amis_prices").select("tr:nth-of-type(2)"); // this 2 means the second row that you wanted
String name = row.select(".listItem").text();
String maxPrice = row.select(".pricedata:nth-of-type(3)").text();
System.out.println(name + ": " + maxPrice); // or what is appropriate in your code
...