关闭

Android之Jsoup解析Html抓包其他网站数据

标签: Jsoup解析HtmlAndroid之Jsoup解析Html抓网站抓包
14844人阅读 评论(4) 收藏 举报
分类:

有时候开发Android客户端时,没有大量的数据,而且懒得自己收集数据,那么就可以尝试用Jsoup解析其他网站的数据。

我以解析我们学校网站的一条通知为例

即下图:

①首先应制定数据在什么标签中,可以通过按F12

②然后就准备看数据所在标签了

可以发现,通知的所有数据都在span标签中,而页面中肯定有很多的span标签,所以知道“通知”的数据在span标签中还不够,还要看我们要的这些span标签所在的容器是哪一个,这里的上一级容器是有td、p、b、tbody、div等,但是我们需要通过class或者id名去找到这个容器的标签,所以就得找div的id为wrap的这个容器了(这网站也不知道是谁写的,标签都不加id或者class,而且将通知写在表格中……也是够了……)

③接下来就是用代码去解析了,首先应该先得到这个网页,但是吧,我通过Jsoup的Jsoup.connect(urlString).get()方法得到的document竟然是空的……反正网上都是这么去得到网页的,但是我试了N次都拿不到这个Document.还是用我自己的办法吧。

我自己封装了一个HttpClient的方法去获取网页所有数据

public static String sendAndgetString(String url) {
		String serverDataString = null;
		HttpGet get = new HttpGet(url);
		try {
			HttpClient client = new DefaultHttpClient();
			HttpResponse response = client.execute(get);
			int code = response.getStatusLine().getStatusCode();
			Log.i("bzjm", "StatusCode:" + code);

			if (code == 200) {
				serverDataString = EntityUtils.toString(response.getEntity(),"gb2312");
				
				Log.i("bzjm", "接收字符串数据成功\nServerData:"+serverDataString);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return serverDataString;
	}


因为我们学校的教务系统的编码是gb2312的,所以,编码必须是gb2312,否则的话中文就成乱码了,所以大家在解析别人的网站的时候,一定要看一眼,这个网站的编码是什么,再去解析,不然,得到的中文数据很可能是乱码哦

 

④开始解析了,代码中注释的很清楚了,直接看代码就好了,还有问题的可以留言哦

package com.zml.parsehtml;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.zml.practice.R;
import com.zml.utils.HttpUtils;

/**
 * @author 郑明亮
 * @Time:2016-3-14 下午1:26:42
 * @version 1.0
 */
public class ParseHTMLActivity extends Activity {
	private TextView tv_showHtml;
	String urlString = "http://jwc.heuet.edu.cn/index.html";
	Document document;
	StringBuffer sb = new StringBuffer();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_parsehtml);
		tv_showHtml = (TextView) findViewById(R.id.tv_showhtml);

		new MyTask().execute();
	}

	private class MyTask extends AsyncTask<Void, Void, String> {
		String urlString = "http://jwc.heuet.edu.cn/html/news/1/20163/news_566.html";
		Document document;
		StringBuffer sb = new StringBuffer();

		@Override
		protected String doInBackground(Void... params) {
			// 拿到网页的所有html数据
			String textString = HttpUtils.sendAndgetString(urlString);
			try {
				// document = Jsoup.connect(urlString).get();
				// 将html字符串解析为document对象
				document = Jsoup.parse(textString);
				String hrefString;
				// 先拿到id为#wrap的div
				Elements div = document.select("#wrap");
				// 然后去拿这个div中的所有span标签
				Elements spans = div.select("span");
				sb.append("通知:\n");
				// 因为拿到了很多的span标签,所以需要从span标签中一个个拿出数据
				for (Element element : spans) {
					// String href = element.select("a[href]");
					hrefString = element.getElementsByTag("span").text();
					// name =
					// element.getElementsByTag("a").attr("href").text();//这个是拿超链接的链接的
					sb.append(hrefString);
				}

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			return sb.toString();
		}

		@Override
		protected void onPostExecute(String result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
			Toast.makeText(getApplicationContext(), result, 1).show();
			if (result != null) {
				tv_showHtml.setText(result);
			}

		}
	}
}

解析后显示在TextView上的数据:

Jsoup需要用的jar包  从这下载哦~
 

如果,您认为这篇博客让您有些收获,不妨点击一下【】。

如果,您希望更容易地发现我的新博客,不妨点击一下【加关注】。

因为,我的热情需要您的肯定和支持。 

感谢您的阅读,如果文章中有错误或者您有什么好的建议,也欢迎您直接留言批评指教。Thanks,friends!

 

 

 

5
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

android中jsoup解析html的几个例子

1.获取百度所有链接的例子(通过ID): Java代码   public class Activity01(改成你自己的Activity) extends Activity  ...
  • xjbclz
  • xjbclz
  • 2016-08-22 23:28
  • 1748

Android Html解析

在前一篇 Android SpannableString浅析中我们采用html实现了文本处理的效果。当时设置部分的代码如下:private void setText() { String ...
  • xueshanhaizi
  • xueshanhaizi
  • 2016-05-22 18:05
  • 14133

Android_GitHub_jsoup(一)简介、入门、输入

SourceFrom:https://github.com/jhy/jsoup SourceFrom:http://www.open-open.com/jsoup/parsing-a-document...
  • iwanghang
  • iwanghang
  • 2016-04-29 18:19
  • 923

html数据抓包

  • 2012-06-24 22:34
  • 649KB
  • 下载

Android解析Json数据之FastJson解析

之前写了关于org.json 以及gson解析 json格式数据的相关博文,今天再补充一下使用阿里巴巴工程师类库fastjson解析json数据,fastjson和谷歌的gson很像,但是比谷歌的gs...
  • zml_2015
  • zml_2015
  • 2016-07-18 11:13
  • 2201

Android应用开发-小巫CSDN博客客户端Jsoup篇

Android应用开发-小巫CSDN博客客户端Jsoup篇 距上一篇博客已经过去了两个星期,小巫也觉得非常抱歉,因为在忙着做另外一个项目,几乎抽不出空来,这不小巫会把剩下的博文全部在国庆补上。本篇博客...
  • wwj_748
  • wwj_748
  • 2014-10-01 21:12
  • 12850

jsoup选择具有多个class的标签

//可以使用 Elements links = doc.select("div.WB_media_wrap.clearfix");
  • u012660667
  • u012660667
  • 2015-11-06 13:52
  • 2932

Android 使用Charles 进行抓包

1. 下载Charles工具www.charlesproxy.com 2. 手机安装Charles证书http://www.charlesproxy.com/assets/legacy-ssl/cha...
  • y874961524
  • y874961524
  • 2016-10-10 21:50
  • 1073

我的Android笔记(八)—— 使用Jsoup解析Html

想要做一个看新闻的应用,类似Cnbeta客户端的东西。大致思路如下:根据链接获取新闻列表页的html代码,然后解析,找到所有的新闻标题和新闻链接用listView显示,当点击ListView的Item...
  • barryhappy
  • barryhappy
  • 2012-03-18 16:50
  • 41377

转载自android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式)

转载自http://blog.csdn.net/sac761/article/details/48379173 android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式) ...
  • shadow_930
  • shadow_930
  • 2016-09-18 21:33
  • 2791
    个人资料
    • 访问:1015573次
    • 积分:9937
    • 等级:
    • 排名:第2040名
    • 原创:148篇
    • 转载:49篇
    • 译文:5篇
    • 评论:175条
    个人博客
    博客专栏
    最新评论
    个人博客
    Fork me on GitHub