crawler.xml
9744898 9745020
CrawlerDemo.java
package com.baizhan.xml.crawler; import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException; import cn.wanghaomiao.xpath.model.JXdocument; import cn.wanghaomiao.xpath.model.JXNode; import org.jsoup.Jsoup; import org.jsoup.nodes.document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.List; public class CrawlerDemo { public static void main(String[] args) { int min=0,max=0; try { //2. 解析 XML 配置文件:加载 XML 文件到内存,转为 document 对象。 //获得xml文件绝对路径 String path=CrawlerDemo.class.getClassLoader().getResource( "com/baizhan/xml/crawler/crawler.xml").getPath().replace( "%20"," "); //转为 document 对象 document document=Jsoup.parse(new File(path),"utf-8"); //3. 获取 XML 配置文件的配置信息 //XPath方式获取 JXdocument jxdocument=new JXdocument(document); ListminNodes=jxdocument.selN("//min"); List maxNodes=jxdocument.selN("//max"); Element minElement=minNodes.get(0).getElement(); Element maxElement=maxNodes.get(0).getElement(); String maxStr=maxElement.text(); String minStr=minElement.text(); //4. 将配置信息应用于爬虫程序中 min=Integer.parseInt(minStr); max=Integer.parseInt(maxStr); System.out.println(min+"======="+max); } catch (IOException e) { e.printStackTrace(); } catch (XpathSyntaxErrorException e) { e.printStackTrace(); } //5. 设置循环自动爬取 for (int i=min;i<=max;i++){ try { //2. 使用 Jsoup 获取网页 HTML 源文件,转为 document 对象 document document= Jsoup.parse(new URL("http://daily.zhihu.com/story/"+i),1000); //3. 通过 document 对象,获取需要的 Element 对象 //获取头图,标题,作者,正文 //头图 Elements headerImgEle=document.getElementsByAttributevalue("alt","头图"); //标题 Elements headerEle=document.select(".DailyHeader-title"); //作者 Elements authorEle=document.select(".author"); //content是正文 Elements contentEle=document.select(".content"); //4. 获取 Element 对象的数据。 //get是获取第几个元素,get(0)是获取第一个,因为头图就一个,再获取src属性的文本 //头图链接 String headerImg=headerImgEle.get(0).attr("src"); String header=headerEle.text(); String author=authorEle.text(); String content=contentEle.text(); System.out.println(headerImg); System.out.println(header); System.out.println(author); System.out.println(content); System.out.println("------------------------------------------------------------------"); }catch (Exception ex){ //有的页面不存在 System.out.println("页"+i+"不存在"); } }//for } }
这样就好比形成了一个半自动的软件,和框架原理差不多,用户只需要配置参数即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)