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

7 篇文章 1 订阅
3 篇文章 0 订阅

有时候开发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 zml2015
 * @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!

 

 

 

 
微信扫码订阅
UP更新不错过~
关注
  • 7
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:程序猿惹谁了 设计师:我叫白小胖 返回首页
评论 5

打赏作者

zml_2015

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值