好吧,我一直在应用程序中显示来自网站的新闻标题和内容http://www.myagdikali.com
我可以从'myagdikali.com/category/news/national-news/'中提取数据,但此页面中只有10个帖子,其他页面的链接为1,2,3 ...比如myagdikali.com/category/news/national-news/page/2。
我需要知道的是,如何从/ national_news下的每个可能页面中提取新闻?甚至可以使用Jsoup吗?
到目前为止,我从单个页面提取数据的代码是:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_all, container, false);
int i = getArguments().getInt(NEWS);
String topics = getResources().getStringArray(R.array.topics)[i];
switch (i) {
case 0:
url = "http://myagdikali.com/category/news/national-news";
new NewsExtractor().execute();
break;
.....
[EDIT]
private class NewsExtractor extends AsyncTask<Void, Void, Void> {
String title;
@Override
protected Void doInBackground(Void... params) {
while (status == OK) {
currentURL = url + String.valueOf(page);
try {
response = Jsoup.connect(currentURL).execute();
status = response.statusCode();
if (status == OK) {
Document doc = response.parse();
Elements urlLists = doc.select("a[rel=bookmark]");
for (org.jsoup.nodes.Element urlList : urlLists) {
String src = urlList.text();
myLinks.add(src);
}
title = doc.title();
}
} catch (IOException e) {
e.printStackTrace();
}
page++;
}
return null;
}
修改 在尝试从没有循环的单个页面提取数据时,我可以提取数据。但是在使用while循环之后,我得到错误,声明没有附加适配器。
实际上我在RecyclerView中加载提取的数据,onPostExecute就像这样:
@Override
protected void onPostExecute(Void aVoid) {
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
myRecyclerViewAdapter = new MyRecyclerViewAdapter(getActivity(),myLinks);
recyclerView.setAdapter(myRecyclerViewAdapter);
}
答案 0 :(得分:0)
由于您知道所需页面的URL
- http://myagdikali.com/category/news/national-news/page/X(其中X是介于2和446之间的页码),因此您可以遍历URL
。您还需要使用Jsoup的response
,以确保页面存在(可以更改数字446 - 我相信它会增加)。
代码应该是这样的:
final String URL = "http://myagdikali.com/category/news/national-news/page/";
final int OK = 200;
String currentURL;
int page = 2;
int status = OK;
Connection.Response response = null;
Document doc = null;
while (status == OK) {
currentURL = URL + String.valueOf(page); //add the page number to the url
response = Jsoup.connect(currentURL)
.userAgent("Mozilla/5.0")
.execute(); //you may add here userAgent/timeout etc.
status = response.statusCode();
if (status == OK) {
doc = response.parse();
//extract the info. you need
}
page++;
}
这当然不是完全正常工作的代码 - 您必须添加try-catch
句子,但编译器会帮助您。
希望这会对你有所帮助。
修改强>
1.我编写了代码 - 我必须发送一个userAgent
字符串才能从服务器获得响应。
2.代码在我的机器上运行,它会打印很多????
,因为我没有安装正确的字体
3.您收到的错误来自Android
部分 - 与您的view
有关。你没有发布那段代码......
4.尝试添加userAgent
,它可以解决它
5.请通过编辑将错误和您运行的代码添加到原始问题中,它更具可读性。