您现在的位置是:主页 > news > 陕西城乡建设委网站/友情链接交换的方法
陕西城乡建设委网站/友情链接交换的方法
admin2025/5/2 0:42:41【news】
简介陕西城乡建设委网站,友情链接交换的方法,金棕榈客户关系管理系统,使网站有流量JAVA爬虫–编写第一个网络爬虫程序前言 上一章节介绍了XPATH基础语法,本章节将手把手带大家编写第一个爬虫程序,同时也希望能通过这个爬虫程序,帮助大家熟悉上一章节学习的XPATH基础语法并运用到实战中来。 目标 通过Java程序采集URL地址&am…
JAVA爬虫–编写第一个网络爬虫程序
前言
上一章节介绍了XPATH基础语法,本章节将手把手带大家编写第一个爬虫程序,同时也希望能通过这个爬虫程序,帮助大家熟悉上一章节学习的XPATH基础语法并运用到实战中来。
目标
通过Java程序采集URL地址,并获取地址中的标题,发布时间,正文内容,并把采集的内容保存到本地文件中。
准备工作
1.jdk1.6以及以上
2.eclipse
3.URL地址:http://blog.csdn.net/gongbing798930123/article/details/78955597
4.htmlcleaner.jar
HtmlCleaner包简介
HtmlCleaner是一个开源的Java语言的Html文档解析器。HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML 文档。
默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。它被设计的小,快速,灵活而且独立。HtmlCleaner也可用在Java代码中,当命令行工具或Ant任务。 解析后编程轻量级文档对象,能够很容易的被转换到DOM或者JDom标准文档,或者通过各种方式(压缩,打印)连续输出XML。
简单来说HtmlCleaner可以把我们下载的Html内容,转换成DOM对象,并且该Jar包提供了XPATH解析的API,帮助我们通过XPATH解析采集到的网页内容。
代码示例:
DataBean.java:
存放标题,正文,发布时间的实体类
package com.demo;
/**
*
* @author binggong
* @创建时间 2018年1月4日 下午10:18:26
* @微信公众号:DT数据技术博文
* @tag: 存放标题,正文,发布时间的实体类
*/
public class DataBean {/*** 标题*/
private String title;/*** 发布时间*/
private String pubtime;/*** 正文内容*/
private String context;public DataBean() {super();
}public DataBean(String title, String pubtime, String context) {super();this.title = title;this.pubtime = pubtime;this.context = context;
}public String getTitle() {return title;
}public void setTitle(String title) {this.title = title;
}public String getPubtime() {return pubtime;
}public void setPubtime(String pubtime) {this.pubtime = pubtime;
}public String getContext() {return context;
}public void setContext(String context) {this.context = context;
}
}
DownloadHtml.java:
下载网页内容
package com.demo;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;/**
*
* @author binggong
* @创建时间 2018年1月5日 下午9:25:31
* @微信公众号:DT数据技术博文
* @tag: 下载网页内容
*/
public class DownloadHtml {/*** 下载指定URL的Html内容* @param url url连接* @return 返回html页面内容* @throws Exception */
public String getHtml(String url) throws Exception{URL u = new URL(url);URLConnection conn =u.openConnection();InputStream in = conn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));String line = null;StringBuffer html = new StringBuffer();while((line=br.readLine())!=null){html.append(line);}in.close();br.close();return html.toString();
}}
SpiderMain.java:
爬虫解析存储类
package com.demo;import java.io.PrintWriter;import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;/**
*
* @author binggong
* @创建时间 2018年1月4日 下午10:24:01
* @微信公众号:DT数据技术博文
* @tag: 爬虫解析
*/
public class SpiderMain {/*** 爬虫解析方法* @param url 待采集的URL* @return 返回解析的内容* @throws Exception*/
public DataBean getSpiderData(String url) throws Exception{//1.下载htmlString html = new DownloadHtml().getHtml("http://blog.csdn.net/gongbing798930123/article/details/78955597");HtmlCleaner hc = new HtmlCleaner();//2.把html转换成dom对象TagNode tn = hc.clean(html);//3.通过xpath解析dom对象String title = tn.evaluateXPath("//h1[@class='csdn_top']/text()")[0].toString();String context = tn.evaluateXPath("//div[@id='article_content']/text()")[0].toString();String pubictime = tn.evaluateXPath("//span[@class='time']/text()")[0].toString();//4.把结果放入到实体类中DataBean result = new DataBean();result.setTitle(title);result.setPubtime(pubictime);result.setContext(context);return result;
}/*** 保存采集到的内容* @param url 待采集的网页* @param outpath 存储的路径* @throws Exception */
public void saveSpiderData(String url,String outpath) throws Exception{DataBean data = getSpiderData(url);PrintWriter pw = new PrintWriter(outpath);pw.println("标题:"+data.getTitle());pw.println("发布时间:"+data.getPubtime());pw.println("正文:"+data.getContext());pw.flush();pw.close();
}public static void main(String[] args) {try {new SpiderMain().saveSpiderData("http://blog.csdn.net/gongbing798930123/article/details/78955597","c:\\spider_result.txt");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
总结
从代码示例可以看出,完成一个爬虫程序还是比较简单的,相信对于有学习过Java基础的你上手起来很容易。
同时从代码示例可以看出,爬虫的基本流程为:
请求URL--->下载HTML内容--->解析内容--->保存结果
对于生产级的爬虫项目来说需要处理的问题远不止这些,比如在项目中会遇到反爬虫、性能、登录、加密、异步请求问题、请求失败、代码健壮等这些问题都需要解决。
万变不离其宗,不管生产级的爬虫项目遇到多少难题,爬虫的基础流程是不会变的,
同时后面我会把我在爬虫中所踩的坑都会记录下来,希望能对读者在爬虫道路上少走弯路。
备注:大家记得关注微信公众号:DT数据技术博文,回复:001,下载项目jar包和源码哟!
