jsoup的一个爬虫例子
jsoup的maven依赖:
jar包下载地址:http://note.youdao.com/noteshare?id=c2444dc21b286006fb9027683f2a5053
在pom.xml中配置
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.7.3</version> </dependency>
package com.Jsoup; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JsoupTestDemo { private static final Logger log = LoggerFactory.getLogger(JsoupTestDemo.class); public static void main(String[] args) { System.out.println("helloworld"); String url = "http://hotels.ctrip.com/hotel/beijing1/location94#ctm_ref=hod_hp_sb_lst"; String encoding ="utf-8"; String html = getHTMLResourceByUrl(url,encoding); System.out.println(html);//输出html String fengzhuang = Fengzhuang(html,encoding); System.out.println(fengzhuang); } public static String Fengzhuang(String html,String encoding ){ Document parse = null; List<Map<String,String>> list = new ArrayList<Map<String,String>>(); //解析html,按照什么编码进行解析html parse = Jsoup.parse(html,encoding); Element elementById = parse.getElementById("hotel_list"); Elements elementsByClass = elementById.getElementsByClass("searchresult_list"); for (Element element : elementsByClass) { Map<String,String> map = new HashMap<String,String>(); //获取酒店的图片 String imgSrc = element.getElementsByTag("img").attr("src"); //获取酒店title String title = element.getElementsByTag("ima").attr("alt"); //获取酒店的描述信息 String desc = element.getElementsByClass("searchresult_htladdress").text(); map.put("imgSrc", imgSrc); map.put("title",title); map.put("desc",desc); list.add(map); } return list.toString(); } //获取html public static String getHTMLResourceByUrl(String url,String encoding){ StringBuffer sb = new StringBuffer(); URL urlObj =null; URLConnection openConnection =null; InputStreamReader isr = null; BufferedReader br = null; try { urlObj = new URL(url); openConnection = urlObj.openConnection(); isr = new InputStreamReader(openConnection.getInputStream(),encoding); //建立文件缓冲流 br = new BufferedReader(isr); //建立临时文件 String temp = null; while((temp=br.readLine())!=null){ sb.append(temp+"\n"); } } catch (MalformedURLException e) { // TODO Auto-generated catch block log.error("error message", e); } catch (IOException e) { // TODO Auto-generated catch block log.error("error message", e); }finally{ try { if(isr !=null){ isr.close(); } } catch (IOException e) { // TODO Auto-generated catch block log.error("error message", e); } } return sb.toString(); } }
测试结果:
[{title=, imgSrc=http://dimg12.c-ctrip.com/images/hotel/128000/127522/43427c590bc342fdb5fb6ca19b6abdf2_R_130_130.jpg, desc=朝阳区酒仙桥北路9号荧屏里4号,近酒仙桥路。 【 望京、酒仙桥、798地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/200u070000002izr2FE01_R_130_130.jpg, desc=朝阳区酒仙桥路13号,近望京SOHO,望京国际商业中心,798艺术区。 【 望京、酒仙桥、798地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/fd/hotel/g5/M08/8C/C1/CggYsFcrF_GAZHusAEAz_YYcL3E922_R_130_130.jpg, desc=朝阳区北苑路200号安苑东里三区10号院6号楼,近安苑路。 【 亚运村、奥体中心地区】}, {title=, imgSrc=http://dimg10.c-ctrip.com/images/hotel/83000/82458/2eed25257045479499c6aed8ab3c49db_R_130_130.jpg, desc=朝阳区建国门外永安里中街25号2幢,近永安里地铁站。 【 北京站、建国门地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/200r050000000rygh9993_R_130_130.jpg, desc=朝阳区新源西里东街6号楼,近新东路口。 【 东直门、工体、雍和宫地区 燕莎、三里屯商业区】}, {title=, imgSrc=http://dimg12.c-ctrip.com/images/hotel/109000/108346/4b334f9eaebb4530bf30f8cef4f4d1c8_R_130_130.jpg, desc=朝阳区小黄庄北街2号2幢,近地铁5号线和平西桥站。 【 马甸、安贞地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/fd/hotel/g2/M02/E1/50/Cghzf1TPQVmAKfGwABNnbBtlWA8846_R_130_130.jpg, desc=朝阳区酒仙桥彩虹路798北门,近酒仙桥北路。 【 望京、酒仙桥、798地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/hotel/140000/139379/0165E24A503F416A81EC81545F993747_R_130_130.Jpg, desc=朝阳区静安里30号,近中国国际展览中心。 【 国展中心地区】}, {title=, imgSrc=http://dimg11.c-ctrip.com/images/fd/hotel/g1/M07/E2/EB/CghzfVS405uAGRNpAAEsvt174L4590_R_130_130.jpg, desc=朝阳区霄云路霞光里30号院6号楼。 【 燕莎、三里屯商业区】}, {title=, imgSrc=http://dimg12.c-ctrip.com/images/fd/hotel/g5/M04/8C/99/CggYsVcrDxSAPqEEADgEutlyRds555_R_130_130.jpg, desc=朝阳区农光东里34号楼,近劲松桥。 【 劲松、潘家园地区】}, {title=, imgSrc=http://dimg11.c-ctrip.com/images/fd/hotel/g4/M04/8D/74/CggYHFYtiVqAIy4KAAD17Zgk6nk251_R_130_130.jpg, desc=朝阳区广渠路15号金茂府23号院7号楼,近东四环大郊亭桥西北角。 【 国贸地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/fd/hotel/g5/M08/91/28/CggYsVcrHJOAID85ADJRAML-1SM223_R_130_130.jpg, desc=朝阳区望京湖光中街8号,近南湖南路。 【 望京、酒仙桥、798地区】}, {title=, imgSrc=http://dimg11.c-ctrip.com/images/200u050000000s3nk9EE3_R_130_130.jpg, desc=朝阳区西大望南路南口周庄嘉园南里1号楼,临近弘燕路路口。 【 劲松、潘家园地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/fd/hotel/g6/M02/CB/C2/CggYtFcxG4eALX5SAAHd53oTmSU782_R_130_130.jpg, desc=朝阳区新东路8号首开铂郡南区4号楼1门三层170房间,近幸福三村四巷。 【 东直门、工体、雍和宫地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/200b060000001xgcj7010_R_130_130.jpg, desc=朝阳区东直门外大街28号港湾国际16层,近春秀路路口。 【 东直门、工体、雍和宫地区】}, {title=, imgSrc=http://dimg10.c-ctrip.com/images/fd/hotel/g3/M03/56/47/CggYG1X4j5KAI9oFAAKbsgTNU-k330_R_130_130.jpg, desc=朝阳区东四环红领巾桥东400米,路北50米,近十里堡地铁站。 【 燕莎、三里屯商业区 国贸地区】}, {title=, imgSrc=http://dimg12.c-ctrip.com/images/200o070000002rvo41255_R_130_130.jpg, desc=朝阳区东三环北路8号,近农展馆。 【 燕莎、三里屯商业区】}, {title=, imgSrc=http://dimg10.c-ctrip.com/images/t1/hotel/86000/85893/eeafbfdd4fcc4df1b617e50a8c544c9e_R_130_130.jpg, desc=朝阳区霄云路26号,近天泽路。 【 燕莎、三里屯商业区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/t1/hotel/1287000/1286149/888f353e11424c9da1360ced3c317a48_R_130_130.jpg, desc=朝阳区建国门南大街2号,近建外大街。 【 北京站、建国门地区 国贸地区】}, {title=, imgSrc=http://dimg10.c-ctrip.com/images/hotel/375000/374421/3412b6d6ccce488188185fb699bb26e5_R_130_130.jpg, desc=朝阳区亮马桥路48号,近燕莎桥。 【 燕莎、三里屯商业区 东直门、工体、雍和宫地区】}, {title=, imgSrc=http://dimg10.c-ctrip.com/images/t1/hotel/1199000/1198300/db2629b825574329842aaaa89f28e146_R_130_130.jpg, desc=朝阳区呼家楼京广中心,近京广桥。 【 国贸地区】}, {title=, imgSrc=http://dimg10.c-ctrip.com/images/hotel/20000/19267/4d01b49ad91245cd97f4c55f4569d680_R_130_130.jpg, desc=朝阳区北四环中路华严北里8号,健翔桥辅路东南侧。 【 亚运村、奥体中心地区】}, {title=, imgSrc=http://dimg10.c-ctrip.com/images/hotel/397000/396423/77d4c05c5f114ab59e8cab81d77a132c_R_130_130.jpg, desc=朝阳区新源南路2号,燕莎友谊商城正对面。 【 燕莎、三里屯商业区 国展中心地区】}, {title=, imgSrc=http://dimg13.c-ctrip.com/images/2009050000000ysv59652_R_130_130.jpg, desc=朝阳区亮马桥路50号,近燕莎友谊商城。 【 燕莎、三里屯商业区】}, {title=, imgSrc=http://dimg12.c-ctrip.com/images/t1/hotel/1000/26/76e4fb4dc72344fcb6024390fe9305a7_R_130_130.jpg, desc=朝阳区北辰东路8号,奥林匹克中心对面。 【 亚运村、奥体中心地区】}, {title=, imgSrc=, desc=}]
更多技术请关注微信公众号:程序员技术前沿