zoukankan      html  css  js  c++  java
  • 使用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()+"	"+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
    实在是因为敏感词太多了,只能放出一部分。。。

  • 相关阅读:
    Qt5.3中qml ApplicationWindow设置窗口无边框问题
    解决qt5在ubuntu下无法调用fcitx输入中文的问题
    qt4.8中多线程的几种方式
    qt5.2.1在linux下去除最大化和最小化按钮
    最近玩了一下qt5.2.1,顺着写点东西,关于这个版本设置程序主窗口居中
    控制台小游戏-贪吃蛇,c++和c#版
    数据库锁机制(一)——概述
    jQuery插件编写学习+实例——无限滚动
    通过错误处理来理解三次握手和四次挥手
    发现一个木马
  • 原文地址:https://www.cnblogs.com/naive/p/3573062.html
Copyright © 2011-2022 走看看