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包和源码哟!

    ![这里写图片描述](https://img-blog.csdn.net/20180106161404304?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ29uZ2Jpbmc3OTg5MzAxMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

JAVA爬虫--编写第一个网络爬虫程序相关推荐

  1. java爬虫编写步骤_JAVA爬虫--编写第一个网络爬虫程序

    JAVA爬虫–编写第一个网络爬虫程序 前言上一章节介绍了XPATH基础语法,本章节将手把手带大家编写第一个爬虫程序,同时也希望能通过这个爬虫程序,帮助大家熟悉上一章节学习的XPATH基础语法并运用到实 ...

  2. 《小朱家的爬虫》第二课------- 编写第一个网络爬虫

    一.Python的安装 就在这安装就好了 https://www.python.org/getit/ 一定要注意选择自己电脑的型号,其他的倒也是没啥 这里我推荐的编译器是PyCharm,别问什么,我要 ...

  3. 《用python写网络爬虫》 编写第一个网络爬虫

    为了抓取网站,我们首先需要下载包含有感兴趣数据的网页,该过程一般被称为爬取"crawing".爬取一个网站有很多种方法,而选用哪种方法更加合适,则取决于目标网站的结构.本章中,首先 ...

  4. 爬虫获取不到网页完整源码_你的第一只网络爬虫

    " 我相信有相当大部分人,学习python最初动机,就是做一个网络爬虫,虽然python的主要强项是数据分析方面(至少我是这样认为的),但这并不妨碍它成为目前最主流的网络爬虫编写语言.&qu ...

  5. python3.6爬虫库_python3.6 网络爬虫

    <精通Python网络爬虫:核心技术.框架与项目实战>--导读 前 言 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引擎中,主要使用通用网络爬虫 ...

  6. java怎么写网络爬虫_教你如何编写简单的网络爬虫

    一.网络爬虫的基本知识 网络爬虫通过遍历互联网络,把网络中的相关网页全部抓取过来,这体现了爬的概念.爬虫如何遍历网络呢,互联网可以看做是一张大图,每个页面看做其中的一个节点,页面的连接看做是有向边.图 ...

  7. 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫

    [网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14  1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...

  8. 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

    本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 初识网 ...

  9. Python之网络爬虫(爬虫基本认知、网络爬虫之路)

    文章目录 一.爬虫基本认知 二.爬虫之路 初级爬虫工程师 中级爬虫工程师 高级爬虫工程师 一.爬虫基本认知 1.爬虫的简单定义 网络爬虫,又称为网页蜘蛛.蚂蚁.蠕虫.模拟程序,在FOAF社区中,被称为 ...

  10. python为什么叫爬虫-python为什么叫网络爬虫

    爬虫可以抓取网站或应用程序的内容并提取有用的价值,它还可以模拟用户在浏览器或应用程序上的操作,以实现自动化程序.今天小编主要给大家分享python为什么叫网络爬虫,希望对你们有帮助! 一.你知道什么是 ...

最新文章

  1. Could not load file or assembly App_Licenses.dll的问题
  2. java中IO流用到了哪种设计模式
  3. 聊聊如何构建自驱团队(3)
  4. 操作系统之内存管理:3、基本分页存储管理
  5. 秒杀系统的核心点都在这里,快来取
  6. DDOS攻击工具有哪些?怎么防御DDOS攻击?
  7. 华为机试高频题目(Java实现)
  8. C51单片机重要知识点总结
  9. [MQ]什么是消息队列?
  10. Polygon 上 3 款最受欢迎的 GameFi 游戏
  11. IIS发布问题:HTTP错误404.17和404.2
  12. Vue进阶(壹佰):当前页面刷新并重载页面数据
  13. 【WebFace260M】《WebFace260M:A Benchmark Unveiling the Power of Million-Scale Deep Face Recognition》
  14. 从word中提取图片的三种方法
  15. 雷电网络(二):掌握雷电网络的特点 | 区块链技术博客
  16. 基于云原生的大数据产品前端实践 | 第七期图文直播文字回放
  17. CSS文字大小单位px、em、pt
  18. 用python把Excel表中不同货币的资金换算成人民币
  19. AMD中国的精神-郭可尊
  20. OPENCV学习笔记 - SIFT 尺度不变特征变换 Python

热门文章

  1. 什么是MySQL集群?带你全面掌握MySQL集群原理
  2. 多线程高并发编程(1) -- 基础及详解
  3. 8选1的多路选择器c语言代码,8选1多路选择器电路图(五款8选1多路选择器电路)
  4. SpringBoot非官方教程 | 终章:文章汇总
  5. 条码检测系统——基于MATLAB的一维条码识别
  6. React学习笔记(番外一)——video.js视频播放组件的入门及排坑经历
  7. C# matlab中标准差计算方法
  8. 如何将 Mac 显示器投放到 Apple TV 或非 Apple 智能电视?
  9. 工行u盾显示316_工行网银客户端检测不到U盾的解决方法
  10. 现代通信技术课程小结