最近想做一个app,没什么思路,网上看了,想做一个图片浏览的,可是没有数据呀,想到了网上比较火的网络爬虫,实现方式有很多种,这里选择了Jsoup。想到爬虫,还想到了网上有收费的什么电子书呀等等这些,那我是不是也可以通过爬虫来获取数据呢?当然,这里说的是一些比较low的网站,好的网站是很难有机会的,但也说明是技术不到家。
好了,下面进入今天的正题。
jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。
jsoup的主要功能如下:
* 从一个URL,文件或字符串中解析HTML;
* 使用DOM或CSS选择器来查找、取出数据;
* 可操作HTML元素、属性、文本;
如果对jsoup不熟悉,请移步http://jsoup.org/ ,我也是看别人的文章学习的,如有侵权,请联系我。
这里贴一下我用到的 Java工程的测试代码
package com.javen.Jsoup;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupTest {
static String url="http://www.cnblogs.com/zyw-205520/archive/2012/12/20/2826402.html";
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
BolgBody();
//test();
//Blog();
/*
* Document doc = Jsoup.connect("http://www.oschina.net/")
* .data("query", "Java") // 请求参数 .userAgent("I ’ m jsoup") // 设置
* User-Agent .cookie("auth", "token") // 设置 cookie .timeout(3000) //
* 设置连接超时时间 .post();
*/// 使用 POST 方法访问 URL
/*
* // 从文件中加载 HTML 文档 File input = new File("D:/test.html"); Document doc
* = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");
*/
}
/**
* 获取指定HTML 文档指定的body
* @throws IOException
*/
private static void BolgBody() throws IOException {
// 直接从字符串中输入 HTML 文档
String html = "<html><head><title> 开源中国社区 </title></head>"
+ "<body><p> 这里是 jsoup 项目的相关文章 </p></body></html>";
Document doc = Jsoup.parse(html);
System.out.println(doc.body());
// 从 URL 直接加载 HTML 文档
Document doc2 = Jsoup.connect(url).get();
String title = doc2.body().toString();
System.out.println(title);
}
/**
* 获取博客上的文章标题和链接
*/
public static void article() {
Document doc;
try {
doc = Jsoup.connect("http://www.cnblogs.com/zyw-205520/").get();
Elements ListDiv = doc.getElementsByAttributeValue("class","postTitle");
for (Element element :ListDiv) {
Elements links = element.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text().trim();
System.out.println(linkHref);
System.out.println(linkText);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取指定博客文章的内容
*/
public static void Blog() {
Document doc;
try {
doc = Jsoup.connect("http://www.cnblogs.com/zyw-205520/archive/2012/12/20/2826402.html").get();
Elements ListDiv = doc.getElementsByAttributeValue("class","postBody");
for (Element element :ListDiv) {
System.out.println(element.html());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
下面来介绍android中使用Jsoup异步解析网页的数据
// 爬取数据操作getData(PICTUREURL);// onCreate方法里面
private void getData(final String pictureurl) {
new Thread() {
/**
* @Title: run
* @Description: (非 JavaDoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
super.run();
Connection c = Jsoup.connect(PICTUREURL);
Document doc = null; // 只需先构建一个Jsoup的Document对象,然后就可以快速拿到网页的数据
try {
doc = c.get();
} catch (IOException e) {
e.printStackTrace();
}
if (doc != null) {
Element div = doc.select("div.PictureList").first();
Elements ul = div.select("ul");
Elements li = div.select("li");
Elements a = div.select("a");
for (int i = 0; i < a.size(); i++) {
String h = a.get(i).attr("href");
String t = a.get(i).attr("title");
Elements img = a.select("img");
String s = img.get(i).attr("data-original");
Log.e("抓取---------------->", h + "==" + t + "==" + s
+ "==" + img.toString());
// mPicturebean = new Picturebean.Img();
// mPicturebean.setHref(h);
// mPicturebean.setTitle(t);
// mPicturebean.setImg(s);
// list.add(mPicturebean);
}
}
}
}.start();
}
这里提供一下使用到的jar包
http://download.csdn.net/detail/u014727709/9704489
欢迎start,欢迎评论,欢迎指正