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.下载html

String 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 block

e.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爬虫编写步骤_JAVA爬虫--编写第一个网络爬虫程序相关推荐

  1. 用pycharm进行python爬虫的步骤_使用Pycharm写一个网络爬虫

    在初步了解网络爬虫之后,我们接下来就要动手运用Python来爬取网页了. 我们知道,网络爬虫应用一般分为两个步骤: 1.通过网页链接获取内容: 2.对获得的网页内容进行处理 这两个步骤需要分别使用不同 ...

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

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

  3. python爬虫入门教程pdf-从零开始学Python网络爬虫 PDF 原书扫描版

    给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小143.9 MB,罗攀编写,目前豆瓣.亚马逊.当当. ...

  4. 用python写网络爬虫 第2版 pd_用Python写网络爬虫(第2版)

    用Python写网络爬虫(第2版)电子书 畅销的Python网络爬虫发实战图书全新升级版,上一版年销量近40000册. 针对Python 3.6版本编写. 提供示例完整源码和实例网站搭建源码,确保用户 ...

  5. 爬虫python能做什么 知乎,python网络爬虫能做什么

    python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析.挖掘.机器学习等提供重要的数据源.什么是爬虫? (推荐学习:Python视频教程)网络爬虫(又 ...

  6. python网络爬虫用到哪些技术_做Python网络爬虫需要掌握哪些核心技术?

    在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战.基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因.那么做Python网络爬虫需要掌握哪些核心技 ...

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

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

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

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

  9. java的开发步骤_Java学习1:JAVA开发的步骤

    JDK(Java开发工具箱,做Java开发必须安装的,这是最根本的一个环境.) JDK不是集成开发环境. JDK这个开发工具箱中时Java最核心的库. 98年的时候:Java升级到JDK1.2,Jav ...

最新文章

  1. 服务器控件的异步请求——UpdatePanel和ScriptManager
  2. mysql text查找性能_MySQL TEXT字段性能
  3. 点云着色系列之按坐标轴着色效果展示
  4. Python 超简单一键美化你的文章
  5. OPPO Reno6系列新机获3C认证:支持5G 标配65W快充
  6. 评价法(四):yaahp软件——层次分析法模块使用
  7. SATI统计分析文献--以关键词为例
  8. Android倒计时工具
  9. 一篇文带你从0到1了解建站及完成CMS系统编写
  10. 织梦dede源码列表页调用tags标签并带链接的实现方法
  11. 在CubieTruck上安装TF卡版的armbian
  12. 【Unity Shader 消融效果_案例分享】
  13. CSS设置背景图像的属性
  14. KMP 看毛片算法原理及其实现
  15. Linux如何新建用户
  16. 群晖上安装MediaWiki的简单记录
  17. linux的自动挂载
  18. 以TM32最小系统核心板(STM32F103C8T6)为主,实现led流水灯
  19. 真正秒懂增量表、全量表和拉链表
  20. ios heic格式照片批量转jpg工具

热门文章

  1. 计算机网络技术教室场景,这到底是一间教室?还是一间计算机室?
  2. 川大计算机系1999级高伟,【求助】四川大学谁做计算的? - 量子化学 - 小木虫 - 学术 科研 互动社区...
  3. Java二维数组写古诗
  4. sql 2005基础语法总结
  5. Java SE 6 新特性: Instrumentation 新功能
  6. gdal支持Hammer投影的做法
  7. 电骡协议规范-第二章-客户端和服务器TCP通讯
  8. Hadoop中的FileInputFormat切片机制、FileInputFormat切片大小的参数配置、TextInputFormat、CombineTextInputFormat切片机制
  9. springboot整合shiro实现权限控制
  10. Vue 前端页面按钮权限控制