【基于Jsoup】Android通过Jsoup抓取网页信息详解(一)

时间:2022-10-31 09:24:14

1.关于Jsoup

      Jsoup是在Java中应用较为广泛的一种对HTML做解析的解析器,直接解析某个URL或本地的HTML文档内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

  常以Document对象做处理,如下:

  Document doc = Jsoup.parse(html);

2.应用场景

       例如我们想通过Jsoup抓取   :http://jwc.jxnu.edu.cn/   内的部分信息

  【基于Jsoup】Android通过Jsoup抓取网页信息详解(一)

     File input = new File("/input.html"); 
      Document doc = Jsoup.parse(input, "UTF-8", "http://jwc.jxnu.edu.cn/"); 

      如上,我们将数据抓取下来,如下:

     <HTML>

     <HEAD>

     <TITLE>

      </TITLE>      (其中所有内容省略)

     </HEAD>

      <BODY>

      </BODY>    

      </HTML>

      

   (如上,一个完整的HTML文本的必要内容,当然不完整的HTML的信息也可以做处理,下面将会提及,此处不做探讨)

  接下来,我们将抓取来的HTML的信息做重要的一步操作,过滤。

   

Element content = doc.getElementById("content");

Elements links = content.getElementsByTag("a");

for(Element link : links) {

String linkHref = link.attr("href");

String linkText = link.text();

}

【基于Jsoup】Android通过Jsoup抓取网页信息详解(一)

  以下:

package com.example.officer.myapplication;

import android.content.Context;
import android.net.ConnectivityManager;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import org.jsoup.Connection;
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;


public class MainActivity extends ActionBarActivity {

public static final String TAG=MainActivity.class.getSimpleName();
//Document doc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Context context = this.getApplicationContext();
// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);


new Thread(runnable).start();



}

Runnable runnable = new Runnable(){
@Override
public void run() {
try {
String url = "http://jwc.jxnu.edu.cn/";
Connection conn = Jsoup.connect(url);
// 修改http包中的header,伪装成浏览器进行抓取
conn.header("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:32.0) Gecko/ 20100101 Firefox/32.0");
Document doc = conn.get();
// 获取tbody元素下的所有tr元素
Elements elements = doc.select("tbody tr td div ul");
Log.v(TAG," "+elements.size());
for(Element element : elements) {
String companyName =element.getElementById("nav").getElementsByTag("a").text();
System.out.println("菜单选项"+companyName);
Toast.makeText(MainActivity.this,""+companyName,Toast.LENGTH_LONG).show();
}
}catch(Exception x){
x.printStackTrace();
}
// new MyTask().execute();
handler.sendEmptyMessage(0);
}
};

Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
/**
* 处理UI
*/
// 当收到消息时就会执行这个方法
}
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}



}
【基于Jsoup】Android通过Jsoup抓取网页信息详解(一)

完成