Java 如何使用jsoup解析特定的表数据?

Java 如何使用jsoup解析特定的表数据?,java,parsing,web-scraping,jsoup,Java,Parsing,Web Scraping,Jsoup,我正在开发一个小项目,在这个项目中,我试图从以下链接的表格中解析作物的最新市场价格: 我想得到输出,比如苹果(ammre):12500 我使用的代码是: public class MainActivity extends AppCompatActivity { private String url="http://amis.pk/ViewPrices.aspx?searchType=1&commodityId=1"; TextView datatv; Butto

我正在开发一个小项目,在这个项目中,我试图从以下链接的表格中解析作物的最新市场价格:

我想得到输出,比如苹果(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;
        }
public类MainActivity扩展了AppCompatActivity{
专用字符串url=”http://amis.pk/ViewPrices.aspx?searchType=1&commodityId=1";
文本视图数据电视;
按钮btn;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datatv=(TextView)findviewbyd(R.id.tv);
btn=(按钮)findViewById(R.id.btn);
btn.setOnClickListener(新视图.OnClickListener(){
@TargetApi(Build.VERSION\u code.CUPCAKE)
@凌驾
公共void onClick(视图){
新建描述().execute();
}
});
}
@TargetApi(Build.VERSION\u code.CUPCAKE)
私有类描述扩展了异步任务{
StringBuilder s=新的StringBuilder();
字符串标题;
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
Document mBlogDocument=Jsoup.connect(url.get();
Log.e(“活动日志”、“doInBackground”+mBlogDocument.toString());
Elements table=mBlogDocument.getElementsByClass(“table.cart”);
元素tdsInSecondRow=mBlogDocument.select(“表tr:n第n个子(2)>td”);
对于(元素td:tdsInSecondRow)
{
System.out.println(“TD:+TD.text());
}
s、 附加(表);
s、 追加(第二行);
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}

这段代码将返回第二行中表格数据的完整html,但我如何才能仅获取苹果(ammre)特定的第四列(最高价格)中的数据?我对此一无所知。请提供任何帮助。

这段代码将获取所有表格行并逐个打印:

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…
替换为适合您的代码的内容,例如
按钮.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

所有表标题都在“.listItem”类中。该类是否应返回完整列表?或者该类不起作用。单击按钮不会返回任何数据。我的代码返回所有行,如
Apple(Ammre):12500
then
Apple(Gatcha):-
等等。你只需要第二行吗?请注意,不要在最后一行中使用
System.out.println
,而是在你的android代码中使用适当的操作。我至少需要十个,但需要单独使用。就像单击apple按钮一样,它返回“apple(Ammre)”:12500'在另一个按钮上返回下一个按钮,依此类推。但目前我正在尝试使用第一个按钮。但您的代码仍然没有运行。我正在按编写的方式使用。我可以完全理解此代码。感谢您。我在安卓中使用log.d,但它仍然没有打印。我正在尝试可能是我在某个地方出错了。没有包含足够的p老化HTML要告诉您的代码在做什么,这个问题是离题的。有关堆栈溢出的问题必须是自包含的。这意味着我们需要能够回答,而不必离开站点获取特定于问题的信息(例如,必须访问网站)。感谢您添加此信息。我会记住这一点。但之前的答复帮助很大。