android Jsoup获取网站内容 android获取新闻标题实例

近期做简单的新闻客户端界面使用到了Jsoup获取,使用起来特别方便,这也是被我一个学长称为学android网络必学的一个东西,在此也是分享一下自己近期所学。

首先还是给出效果:

上面是通过textview显示的一个从网站上获取的所有内容的显示,下面是通过listview显示一下获取的新闻的标题,如此显示比较便于理解。

MainActivity:

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView; 

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; 

import java.util.ArrayList;
import java.util.List; 

@SuppressWarnings("unused")
public class MainActivity extends Activity {
  private TextView TV_HTMLCode;
  //此处搞一个TextView主要来显示News列表里面存储的内容,仅仅便于分析和理解 

  private String URL_EOL = "http://www.cnwust.com/newsList/1_1",
      TAG = "ATAG";
  //这是索要获取内容的网址 

  private List<News> NewsList;
  //自定义的News的类,用于存放索要获取新闻的目录、时间以及点击后显示的网址 

  private ListView LV_Result;
  private ArrayAdapter<String> LV_Adapter; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    LV_Result = (ListView) findViewById(R.id.LV_Result);
    TV_HTMLCode = (TextView) findViewById(R.id.TV_HTMLCode);
    TV_HTMLCode.setMovementMethod(ScrollingMovementMethod.getInstance()); 

    ConnectTask C1 = new ConnectTask();
    C1.execute(); 

  } 

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
  } 

  public class ConnectTask extends AsyncTask<Void, Void, String> { 

    @Override
    protected String doInBackground(Void... params) {
      String result = ConnectEOL();
      return result;
    } 

    @Override
    protected void onPostExecute(String result) {
      // TV_HTMLCode.setText(result);
      NewsList = getNews(result);
      List<String> NewsTitles = new ArrayList<String>();
      for (News news : NewsList) {
        TV_HTMLCode.append(news.getNewsTitle() + "\n");
        TV_HTMLCode.append(news.getNewsTime() + "\n");
        TV_HTMLCode.append(news.getNewsUrl() + "\n");
        NewsTitles.add(news.getNewsTitle());
      }
    /* 为ListView添加适配器 */ 

      LV_Adapter = new ArrayAdapter<String>(MainActivity.this,
          android.R.layout.simple_list_item_1, NewsTitles);
      LV_Result.setAdapter(LV_Adapter); 

    /* 为ListView添加点击打开对应网页功能 */
      LV_Result.setOnItemClickListener(new OnItemClickListener() { 

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
          final Uri uri = Uri.parse(NewsList.get(arg2).getNewsUrl());
          final Intent it = new Intent(Intent.ACTION_VIEW, uri);
          startActivity(it);
        } 

      });
      //此处为了方便就点击就直接调用设备默认浏览器打开网址 

      super.onPostExecute(result); 

    } 

  } 

  /* 连接EOL的方法 返回整个网页经过截取之后的的源代码 */
  public String ConnectEOL() {
    String result = "";
    try {
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost(URL_EOL);
      HttpResponse response = httpclient.execute(httppost);
      String Res = EntityUtils.toString(response.getEntity(), "UTF-8"); 

      int st = Res.indexOf("<div id=\"result\">");
      int ed = Res.indexOf("<div id=\"pager\">");
      //这边算是最重要的部分,代码获取的便是这两段之间的部分。 

      String content = Res.substring(st, ed);
      st = content.indexOf("<ul>") + 4;
      ed = content.indexOf("</ul>");
      content = content.substring(st, ed);
      result = content;
    } catch (Exception e) {
      Log.d(TAG, e.toString());
    }
    return result;
  } 

  /* 对源代码进行解析截取的方法 返回一个News数组 */
  public List<News> getNews(String HTMLCode) {
    List<News> newsList = new ArrayList<News>();
    Document doc = Jsoup.parse(HTMLCode);
    Log.d(TAG, "解析html中");
    Elements lis = doc.getElementsByTag("li");
    Log.d(TAG, "lis的size " + lis.size());
    for (Element li : lis) {
      String newstime = li.getElementsByTag("span").text();
      String newstitle = li.getElementsByTag("a").text();
      String newsurl = li.getElementsByTag("a").attr("href");
      //这三段算是Jsoup从html中获取内容的关键了,很容易理解。 

      newsurl = newsurl.replace("/news", "http://www.cnwust.com/news");
      //直接从html的代码中获取的URL是相对路径,此处使用replace改为绝对路径 

      Log.d(TAG, newstime);
      Log.d(TAG, newstitle);
      Log.d(TAG, newsurl); 

      News newst = new News();
      newst.setNewsTime(newstime);
      newst.setNewsTitle(newstitle);
      newst.setNewsUrl(newsurl);
      newsList.add(newst);
    }
    return newsList;
  }
}

News:

public class News {
  private String newsTime;
  private String newsUrl;
  private String newsTitle; 

  public News() { 

  } 

  public News(String newsTitle, String newsTime, String newsUrl) {
    this.newsTime = newsTime;
    this.newsUrl = newsUrl;
    this.newsTitle = newsTitle;
  } 

  public String getNewsTime() {
    return newsTime;
  } 

  public void setNewsTime(String newsTime) {
    this.newsTime = newsTime;
  } 

  public String getNewsUrl() {
    return newsUrl;
  } 

  public void setNewsUrl(String newsUrl) {
    this.newsUrl = newsUrl;
  } 

  public String getNewsTitle() {
    return newsTitle;
  } 

  public void setNewsTitle(String newsTitle) {
    this.newsTitle = newsTitle;
  } 

}

activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".NewsList" > 

  <TextView
    android:id="@+id/TV_HTMLCode"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_above="@+id/LV_Result"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:scrollbars="vertical" /> 

  <ListView
    android:id="@+id/LV_Result"
    android:layout_width="match_parent"
    android:layout_height="230dp"
    android:layout_alignLeft="@+id/TV_HTMLCode"
    android:layout_alignParentBottom="true" >
  </ListView> 

</RelativeLayout>

此处对html代码的解析可能部分新手还是不太清楚,在此也是建议使用chrome浏览器,可以直接查看网站的源码。(有部分加密的网站看不到)下面看一下具体使用的截图:

1、首先先要打开到你要获取内容的网站

2、右击你要获取的内容,并选择  审查元素。

3、使用Jsoup解析html代码。

最后是附上源码下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android使用Jsoup 抓取页面的数据

    jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. Jsoup的官方中文地址:http://www.open-open.com/jsoup/parse-document-from-string.htm 在这个网站上你可以找到一些说明,.jar文件的下载,doc文档的说明等等 jsoup的主要功能如下: 从一个URL,文件或字符串中解析HTML: 使用DOM或

  • Jsoup解析HTML实例及文档方法详解

    解析和遍历一个HTML文档 如何解析一个HTML文档: 复制代码 代码如下: String html = "<html><head><title>First parse</title></head>"  + "<body><p>Parsed HTML into a doc.</p></body></html>";Document doc = Jso

  • Jsoup解析html实现招聘信息查询功能

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据. 下面是招聘网站的html信息: <div class="newlist_list_content" id="newlist_list_content_table"> <table width="853" class=&

  • Java中使用开源库JSoup解析HTML文件实例

    HTML是WEB的核心,互联网中你看到的所有页面都是HTML,不管它们是由JavaScript,JSP,PHP,ASP或者是别的什么WEB技术动态生成的.你的浏览器会去解析HTML并替你去渲染它们.不过如果你需要自己在Java程序中解析HTML文档并查找某些元素,标签,属性或者检查某个特定的元素是否存在的话,那又该如何呢?如果你已经使用Java编程多年了,我相信你肯定试过去解析XML,也使用过类似DOM或者SAX这样的解析器,不过很有可能你从未进行过任何的HTML解析的工作.更讽刺的是,在Jav

  • crawler4j抓取页面使用jsoup解析html时的解决方法

    crawler4j对已有编码的页面抓取效果不错,用jsoup解析,很多会jquery的程序员都可以操作.但是,crawler4j对response没有指定编码的页面,解析成乱码,很让人烦恼.在找了苦闷之中,无意间发现一年代已久的博文,可以解决问题,修改 Page.load() 中的 contentData 编码即可,这让我心中顿时舒坦了很多,接下来的问题都引刃而解了. 复制代码 代码如下: public void load(HttpEntity entity) throws Exception

  • Java实现爬虫给App提供数据(Jsoup 网络爬虫)

    一.需求 最近基于 Material Design 重构了自己的新闻 App,数据来源是个问题. 有前人分析了知乎日报.凤凰新闻等 API,根据相应的 URL 可以获取新闻的 JSON 数据.为了锻炼写代码能力,笔者打算爬虫新闻页面,自己获取数据构建 API. 二.效果图 下图是原网站的页面 爬虫获取了数据,展示到 APP 手机端 三.爬虫思路 关于App 的实现过程可以参看这几篇文章,本文主要讲解一下如何爬虫数据. Android下录制App操作生成Gif动态图的全过程 :http://www

  • Android使用Jsoup解析Html表格的方法

    本文实例讲述了Android使用Jsoup解析Html表格的方法.分享给大家供大家参考,具体如下: 看代码吧,可解析表中的label text button 自己根据需要再添加,呵呵 import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.jsoup.J

  • Android开发之利用jsoup解析HTML页面的方法

    本文实例讲述了Android利用jsoup解析HTML页面的方法.分享给大家供大家参考,具体如下: 这节主要是讲解jsoup解析HTML页面.由于在android开发过程中,不可避免的涉及到web页面的抓取,解析,展示等等,所以,在这里我主要展示下利用jsoup jar包来抓取cnbeta.com网站的话题分类的实例. 下面是主要的代码,由于使用及其简单,我这里就不再多说了: package com.android.web; import java.io.BufferedInputStream;

  • android Jsoup获取网站内容 android获取新闻标题实例

    近期做简单的新闻客户端界面使用到了Jsoup获取,使用起来特别方便,这也是被我一个学长称为学android网络必学的一个东西,在此也是分享一下自己近期所学. 首先还是给出效果: 上面是通过textview显示的一个从网站上获取的所有内容的显示,下面是通过listview显示一下获取的新闻的标题,如此显示比较便于理解. MainActivity: import android.app.Activity; import android.content.Intent; import android.n

  • Python获取excel内容及相关操作代码实例

    Python没有自带openyxl,需要安装: pip install openyxl 打开excel文档: openyxl.load_workbook(excel地址) - 打开现有excel文件 openyxl.Workbook() - 新建一个excel文件 返回一个工作博对象 import openpyxl wb = openpyxl.load_workbook("test.xlsx") print(type(wb)) # <class 'openpyxl.workboo

  • ASP.NET编程获取网站根目录方法小结

    本文实例讲述了ASP.NET编程获取网站根目录方法.分享给大家供大家参考,具体如下: 获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"]) Server.MapPath("/") Server.MapPath("")//当前代码文件所在的目录路劲 Server.MapPath(".") Server.MapPath("../"

  • Android设备蓝牙连接扫描枪获取扫描内容

    条形扫描枪主要可以扫描条形码和二维码等,扫描速度比手机扫描设备快得多,本文简单介绍android 通过蓝牙监听蓝牙连接,当扫描设备连接完成后,扫描设备相当于外接键盘,通过监听外接键盘输入事件,获取扫描出的内容. 其他参照文档:Android设备获取扫码枪扫描内容 1.蓝牙配对 打开系统设置,蓝牙配对扫描枪, 一般扫描枪说明书都有写,配对完成后,显示已连接 2.AndroidManifest中配置权限 在中配置蓝牙连接所需要的权限 <!-- 蓝牙 --> <uses-permission

  • Android账号注册实现点击获取验证码倒计时效果

    网站中为了防止恶意获取验证短信.验证邮箱,都会在点击获取验证码的按钮上做个倒计时的效果,如何实现这个效果,具体内容如下 效果图:   代码: RegisterActivity.java import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import com.jialianjia.bzw.BaseAct

  • 配置android开发环境时出现eclipse获取不到ADT的解决方法

    本文实例讲述了配置android开发环境时出现eclipse获取不到ADT的解决方法.分享给大家供大家参考,具体如下: 在安装完Android SDK后eclipse要获取ADT, 可是由于GFW的存在, eclipse经常无法从http://dl-ssl.google.com/android/eclipse 获取到任何东西. 下面提供解决方法: 以往安装ADT根本就不是个问题,可是现在就是个大问题了,联通的宽带网络连www.google.com.hk都打不开,你叫我们这些P民怎么活? 无论ht

  • Android利用CountDownTimer实现点击获取验证码倒计时效果

    本文实例为大家分享了Android点击获取验证码倒计时的具体代码,供大家参考,具体内容如下 package com.loaderman.countdowntimerdemo; import android.os.Bundle; import android.os.CountDownTimer; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextV

  • Android 使用 DowanloadManager 实现下载并获取下载进度实例代码

    Android 使用 DowanloadManager 实现下载并获取下载进度实例代码 实现代码: package com.koolsee.gallery; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.app.DownloadManager; imp

  • 获取Android签名证书的公钥和私钥的简单实例

    本文以Android签名JKS格式的证书为例: package com.test; import java.io.FileInputStream; import java.security.Key; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher; public class SignTest { pu

  • Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开和关闭,IP地址获取等等,早期的Android版本甚至支持对于IP的设置.在这里仅介绍其简单的一个小应用--获取IP地址. 首先先添加Uses-Permission:CHANGE_WIFI_STATE,WAKE_LOCK和ACCESS_WIFI_STATE.代码如下(AndroidManifest.

随机推荐