使用Jsoup函数包抓取网页内容

之前写过一篇用Java抓取网页内容的文章,当时是用url.openStream()函数创建一个流,然后用BufferedReader把这个inputstream读取进来。抓取的结果是一整个字符串。如果要提取网页中的某个元素或者链接,还需要用正则表达式来查找匹配。
最近看到利用Jsoup库函数可以方便的分析html文件。函数库本身很小,不到2Mb,本领却很大。先用url创建一个Document类的对象,再按照css的格式把链接、图片、文本一一分解出来。比如,我写了一段代码把17届中央委员、候补中央委员、中央纪委委员的百度百科词条链接都抓取到。若逐条解析这些链接,又可以提取其它信息。原代码如下:

package CPCsearch;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

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

import BaikeCard.PersonCard;

public class No17Committee {

	/**
	 * @param args
	 */
	private static Map<String, String> urllist = new HashMap<String, String>();
	
	public static void setURLlist() throws IOException{
		String originalurl = "http://baike.baidu.com/searchword/?word="
				+"中国XX党第十七届中央委员会"+"&pic=1&sug=1&enc=utf-8";
		System.out.println(originalurl);
		Document doc = Jsoup.connect(originalurl).get();
		Element lemmacontent = doc.select("div#lemmaContent-0").first();
		Elements links = lemmacontent.select("a[href]");
		for(Element link:links){
			if(link.text().length()<=10){
				String urladdress = link.attr("abs:href");
				String name = link.text();
				urllist.put(name, urladdress);
			}
		}
		
	}
	
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		setURLlist();
		for(Map.Entry entry:urllist.entrySet()){
			System.out.println(entry.getKey()+"\t"+entry.getValue());
		}
		System.out.println(urllist.size());
	}

}

这里是扑捉到的结果:
中国XX党第十七届中央委员会委员、候补委员、第十七届中央纪律检查委员会委员的百度百科页面链接:
王旭东 http://baike.baidu.com/view/34770.htm
李盛霖 http://baike.baidu.com/view/34722.htm
田成平 http://baike.baidu.com/view/34605.htm
宋秀岩 http://baike.baidu.com/view/122092.htm
胡泽君 http://baike.baidu.com/view/967656.htm
王兆国 http://baike.baidu.com/view/1844.htm
路甬祥 http://baike.baidu.com/view/1860.htm
王太华 http://baike.baidu.com/view/35988.htm
迟万春 http://baike.baidu.com/view/325028.htm
刘奇葆 http://baike.baidu.com/view/303958.htm
王国生 http://baike.baidu.com/view/767111.htm
王沪宁 http://baike.baidu.com/view/159348.htm
张庆伟 http://baike.baidu.com/view/117230.htm
袁家军 http://baike.baidu.com/view/51855.htm
徐绍史 http://baike.baidu.com/view/924447.htm
刀林荫 http://baike.baidu.com/view/795154.htm
金振吉 http://baike.baidu.com/view/624679.htm
张平 http://baike.baidu.com/view/124481.htm
谌贻琴 http://baike.baidu.com/view/768829.htm
梁光烈 http://baike.baidu.com/view/28711.htm
杨利伟 http://baike.baidu.com/view/27767.htm
靖志远 http://baike.baidu.com/view/325364.htm
孙忠同 http://baike.baidu.com/view/325023.htm
陆浩 http://baike.baidu.com/view/119638.htm
吴定富 http://baike.baidu.com/view/321120.htm
李学勇 http://baike.baidu.com/view/282960.htm
刘玉浦 http://baike.baidu.com/view/304626.htm
王宪魁 http://baike.baidu.com/view/576688.htm
陈川平 http://baike.baidu.com/view/1216672.htm
李金城 http://baike.baidu.com/view/1215488.htm
朱明国 http://baike.baidu.com/view/304539.htm
实在是因为敏感词太多了,只能放出一部分。。。

使用Jsoup函数包抓取网页内容,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。