当前位置: 代码迷 >> java >> 尝试使用jSoup从表中抓取数据
  详细解决方案

尝试使用jSoup从表中抓取数据

热度:74   发布时间:2023-07-31 11:59:26.0

初次发布者和相当新的编码器,所以请放轻松。 我正在尝试使用jSoup从表中抓取数据。 但是,我遇到了两个问题:

1)我正在使用NetBeans。 我在第30行(元素tds ...)上遇到“停止”错误,提示找不到符号符号方法getElementsByTag。 我很困惑,因为我以为我导入了正确的程序包,并且在上面的几行中使用了相同的代码,所以没有错误。

2)当我运行代码时,我得到一个错误,指出:

Exception in thread "main" java.lang.NullPointerException
at mytest.JsoupTest1.main(JsoupTest1.java:26)

我认为这意味着正在使用值为NULL的变量。 我是否在上面的for循环中错误地输入了“ row”变量?

这是我的代码。 我真的很感谢您的帮助!

package mytest;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTest1 {
    private static Object row;


    public static void main(String[] args) {
        Document doc = null;
        try {
            doc = Jsoup.connect( "http://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=8&season=2015&month=0&season1=2015&ind=0&team=18&rost=0&age=0&filter=&players=0" ).get();
        }

        catch (IOException ioe) {
            ioe.printStackTrace();
        }

        Element table = doc.getElementById( "LeaderBoard1_dg1_ct100" );

        Elements rows = table.getElementsByTag( "tr" );
        for( Element row:rows ) {
        }

        Elements tds = row.getElementsByTag( "td" );
        for( int i=0; i < tds.size(); i++ ) {
            System.out.println(tds.get(i).text());
        }
    }
}

欢迎使用StackOverflow。

这可行。

Document doc = null;
try {
    doc = Jsoup
            .connect(
                    "http://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=8&season=2015&month=0&season1=2015&ind=0&team=18&rost=0&age=0&filter=&players=0")
            .get();
}
catch (IOException ioe) {
    ioe.printStackTrace();
}

Element table = doc.getElementById("LeaderBoard1_dg1_ctl00");
Elements rows = table.getElementsByTag("tr");
for (Element row : rows) {
    Elements tds = row.getElementsByTag("td");
    for (int i = 0; i < tds.size(); i++) {
        System.out.println(tds.get(i).text());
    }
}

您的代码存在三个问题。

  1. 您使用的ID错误。 代替LeaderBoard1_dg1_ct100使用LeaderBoard1_dg1_ctl00 你把l误以为是1
  2. 第二个问题是Object row 不需要这个。 去掉它。
  3. 您在for循环之外进行了行的迭代。 并且由于您具有“ Object row变量,因此不会出现任何编译错误,从而隐藏了问题。