奥迪汽车建设网站,威海建设银行网站,电商网页开发,深圳建站公司外围转载自 JSOUP 教程—— Java爬虫#xff0c;简易入门#xff0c;秒杀htmlparser关于爬虫#xff0c;之前一直用做第一个站的时候#xff0c;记得那时候写的 爬虫 是爬sina 的数据#xff0c;用的就是 htmlparser 可能是由于好奇和满足我当时的需求#xff0c;那开始就各…转载自 JSOUP 教程—— Java爬虫简易入门秒杀htmlparser关于爬虫之前一直用做第一个站的时候记得那时候写的 爬虫 是爬sina 的数据用的就是 htmlparser 可能是由于好奇和满足我当时的需求那开始就各种写啊一个页面把需要的内容处理下来复杂的写完后不写注释自己都看不懂一直我也知道 JSOUP 好也感觉没空学习新的 爬虫 完全是借口啊。最近我试了一下用 JSOUP 尼玛完全爱上了完全秒杀 htmlparser 。
PS用过都知道JSOUP 是支持css select CSS选择器对于我这样的 jQuery 用的非常6666的人来说哪就是一个字爽死了。Maven 依赖包
dependencygroupIdorg.jsoup/groupIdartifactIdjsoup/artifactIdversion1.9.2/version
/dependency下面展示的代码是实现了相同的一个业务爬取了百度的一些内容。但是你可以看到Htmlparser繁琐JSOUP轻量级。不多说下面看代码。Htmlparser Java代码
String url http://www.baidu.com/s?wdsite:(www.zybang.com)rn50;
/**开始爬取*/
Parser parser new Parser(url);
//设置字符集
parser.setEncoding(utf-8);
//创建一个filter
NodeFilter contentFilter new AndFilter(new TagNameFilter(div), new HasAttributeFilter(id,content_left));
//通过Filter过滤
NodeList contents parser.parse(contentFilter);
//再创建Filter用途通过父类去过滤子类
NodeFilter divsFilter new AndFilter(new TagNameFilter(div), new HasAttributeFilter(data-tools));
NodeList divs contents.extractAllNodesThatMatch(divsFilter,true);
//取值
for (int i 0; i divs.size(); i) {Div div (Div) divs.elementAt(i);String json div.getAttribute(data-tools);if(StringUtils.isNotBlank(json) json.trim().startsWith({)){//获取到jsonJSONObject jsonObj JSONObject.fromObject(json.trim());//获取urlString durl jsonObj.getString(url);//内容url//do something}
}
相同业务之后改成 JSOUP Java代码
String url http://www.baidu.com/s?wdsite:(www.zybang.com)rn50;
Document doc Jsoup.connect(url).get();
Elements divs doc.select(div#content_left div[data-tools]);
for (Element element : divs) {String json element.attr(data-tools);if(StringUtils.isNotBlank(json) json.trim().startsWith({)){//获取到jsonJSONObject jsonObj JSONObject.fromObject(json.trim());//获取urlString durl jsonObj.getString(url);//内容url//do something}
}JSOUP 创建一个模拟浏览器行为的请求头
瞬间你看看逻辑思维都符合现在流行的链式编程。
Document doc Jsoup.connect(url).header(Accept, */*).header(Accept-Encoding, gzip, deflate).header(Accept-Language, zh-CN,zh;q0.8,en-US;q0.5,en;q0.3).header(Referer, https://www.baidu.com/).header(User-Agent, Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0).timeout(5000).get();
然后就开启jQuery模式了。
//获取id 1 的元素的文本值。
doc.select(#1).text();
//获取id 1 的元素的HTML值。
doc.select(#1).html();
//获取id 1 直接子类classcss1 , 然后所有子类的含有class css2 的集合
doc.select(#id .css1 .css2);
.....
后面我会采用视频讲解的方式结合实战去讲解。等着吧我现在在整理 FreeMarker 的视频