【问题标题】:Using Jsoup to extract data使用Jsoup提取数据
【发布时间】:2012-03-10 15:26:57
【问题描述】:

我正在使用 jsoup 从网站中的表中提取数据。http://www.moneycontrol.com/stocks/marketstats/gainerloser.php?optex=BSE&opttopic=topgainers&index=-1 使用 Jsoup。我提到了Using JSoup To Extract HTML Table Contents 和其他类似的问题,但它不打印数据。有人可以向我提供实现此目的所需的代码吗?

public class TestClass
 {


public static void main(String args[]) throws IOException
{
Document doc = Jsoup.connect("http://www.moneycontrol.com/stocks/marketstats/gainerloser.php?optex=BSE&opttopic=topgainers&index=-1").get();

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

【问题讨论】:

  • 查看您的代码可能会对您有所帮助...
  • Terms of Use 建议未经moneycontrol.com 明确书面许可不得进行此类行为。如果您获得他们的许可,请向他们询问用于访问数据的首选 API(由他们组织)。例如。我注意到其中一个链接提到了 RSS 提要。这是一种比 HTML 更“机器友好”的信息形式。
  • 我想获取表格中涨幅最大的人的姓名。我必须稍微调整一下代码,但不知道我必须做什么,因为我是 jsoup 的新手。

标签: java html-parsing jsoup


【解决方案1】:

如果要获取表格的内容(不是头部),则需要更改表格的选择器:

for (Element table : doc.select("table.tbldata14"))

而不是

 for (Element table : doc.select("table.tablehead"))

【讨论】:

  • 它给了我一个索引超出范围的异常,并说数组列表的大小为 0。
  • 嗯,奇怪。重新检查您的代码并在选择器字符串中尝试"table.bdrtpg"
  • 你也可以试试doc.select("div.FL")
【解决方案2】:

一个重要的事情是当你解析 HTML 时检查你在 Doc 中得到了什么,因为它可能有一些问题,比如: 1. 网站可能使用 iframe 来显示内容 2.通过Javascript显示内容 3. 少数网站的脚本不允许jsoup解析,因此doc元素会包含随机数据

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多