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);
List minNodes=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
}
}
这样就好比形成了一个半自动的软件,和框架原理差不多,用户只需要配置参数即可。



