【问题标题】:getting data from website using Jsoup?使用 Jsoup 从网站获取数据?
【发布时间】:2016-06-27 07:48:38
【问题描述】:

尝试使用 Jsoup 而不是网站 API 来练习并从网站获取信息。 我的代码没有错误,但文本字段没有改变。它只是向我显示一个空白区域。我如何从网站获取信息?我正在尝试获取主要新闻,以便可以在我的网站上发布。

我的代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.AsyncTask;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.io.InputStream;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    Document document;
    TextView text;
    String ankosh;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (TextView)findViewById(R.id.textView);
        new Ankosh().execute();

    }

    public class Ankosh extends AsyncTask<Void, Void, Void> {

        private Exception exception;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                // Connect to the web site
                document = Jsoup.connect("http://www.theguardian.com/us").get();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void feed) {

            String ankosh = document.attr("href");
            text.setText(ankosh);



        }
    }


}

【问题讨论】:

  • 练习很好,但你很可能违反了 ToS。此外,如果您需要帮助,您应该指定需要解析的 html 的确切部分。您不能指望这里的人们访问该站点来找出您可能要寻找的内容。
  • 调试你的代码,看看为什么。在这种情况下,html 文档的根标签根本没有(也不应该)有一个名为href 的属性。这意味着您的ankosh 变量为空或空String。请学习如何使用断点和调试。

标签: java android jsoup


【解决方案1】:

问题出在这里:

@Override
protected void onPostExecute(Void feed) {
    String ankosh = document.attr("href");
    text.setText(ankosh);
}

document 变量没有名为href 的属性。这就是ankosh 变量为空的原因。

不如试试这个:(我想如果文档中第一个具有 fc-item__content 类的 div 的主要消息)。

Element mainNewsDiv = document.select("div.fc-container--rolled-up-hide.fc-container__body > div:nth-child(1) > ul > li > div > div > div.fc-item__content").first();

if (mainNewsDiv == null) {
    // Main news not found...
} else {
    text.setText(mainNewsDiv.text());
}

最后一点,您应该避免使用Jsoup.connect 来加载文档。在内部,它使用了速度非常慢的URL 类。改用 Volley。请参阅显示use of Volley and Jsoup 的示例代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2019-09-24
    相关资源
    最近更新 更多