【基于Jsoup】Android通过Jsoup抓取网页信息详解(一)
2015-11-09 19:41
661 查看
1.关于Jsoup
Jsoup是在Java中应用较为广泛的一种对HTML做解析的解析器,直接解析某个URL或本地的HTML文档内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
常以Document对象做处理,如下:
Document doc = Jsoup.parse(html);
2.应用场景
例如我们想通过Jsoup抓取 :http://jwc.jxnu.edu.cn/ 内的部分信息
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是在Java中应用较为广泛的一种对HTML做解析的解析器,直接解析某个URL或本地的HTML文档内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
常以Document对象做处理,如下:
Document doc = Jsoup.parse(html);
2.应用场景
例如我们想通过Jsoup抓取 :http://jwc.jxnu.edu.cn/ 内的部分信息
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();
}
以下:
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); } }
完成
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories