java爬虫编写步骤_JAVA爬虫--编写第一个网络爬虫程序
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爬虫--编写第一个网络爬虫程序相关推荐
- 用pycharm进行python爬虫的步骤_使用Pycharm写一个网络爬虫
在初步了解网络爬虫之后,我们接下来就要动手运用Python来爬取网页了. 我们知道,网络爬虫应用一般分为两个步骤: 1.通过网页链接获取内容: 2.对获得的网页内容进行处理 这两个步骤需要分别使用不同 ...
- 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫
[网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14 1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...
- python爬虫入门教程pdf-从零开始学Python网络爬虫 PDF 原书扫描版
给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小143.9 MB,罗攀编写,目前豆瓣.亚马逊.当当. ...
- 用python写网络爬虫 第2版 pd_用Python写网络爬虫(第2版)
用Python写网络爬虫(第2版)电子书 畅销的Python网络爬虫发实战图书全新升级版,上一版年销量近40000册. 针对Python 3.6版本编写. 提供示例完整源码和实例网站搭建源码,确保用户 ...
- 爬虫python能做什么 知乎,python网络爬虫能做什么
python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析.挖掘.机器学习等提供重要的数据源.什么是爬虫? (推荐学习:Python视频教程)网络爬虫(又 ...
- python网络爬虫用到哪些技术_做Python网络爬虫需要掌握哪些核心技术?
在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战.基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因.那么做Python网络爬虫需要掌握哪些核心技 ...
- 《用python写网络爬虫》 编写第一个网络爬虫
为了抓取网站,我们首先需要下载包含有感兴趣数据的网页,该过程一般被称为爬取"crawing".爬取一个网站有很多种方法,而选用哪种方法更加合适,则取决于目标网站的结构.本章中,首先 ...
- 爬虫获取不到网页完整源码_你的第一只网络爬虫
" 我相信有相当大部分人,学习python最初动机,就是做一个网络爬虫,虽然python的主要强项是数据分析方面(至少我是这样认为的),但这并不妨碍它成为目前最主流的网络爬虫编写语言.&qu ...
- java的开发步骤_Java学习1:JAVA开发的步骤
JDK(Java开发工具箱,做Java开发必须安装的,这是最根本的一个环境.) JDK不是集成开发环境. JDK这个开发工具箱中时Java最核心的库. 98年的时候:Java升级到JDK1.2,Jav ...
最新文章
- 服务器控件的异步请求——UpdatePanel和ScriptManager
- mysql text查找性能_MySQL TEXT字段性能
- 点云着色系列之按坐标轴着色效果展示
- Python 超简单一键美化你的文章
- OPPO Reno6系列新机获3C认证:支持5G 标配65W快充
- 评价法(四):yaahp软件——层次分析法模块使用
- SATI统计分析文献--以关键词为例
- Android倒计时工具
- 一篇文带你从0到1了解建站及完成CMS系统编写
- 织梦dede源码列表页调用tags标签并带链接的实现方法
- 在CubieTruck上安装TF卡版的armbian
- 【Unity Shader 消融效果_案例分享】
- CSS设置背景图像的属性
- KMP 看毛片算法原理及其实现
- Linux如何新建用户
- 群晖上安装MediaWiki的简单记录
- linux的自动挂载
- 以TM32最小系统核心板(STM32F103C8T6)为主,实现led流水灯
- 真正秒懂增量表、全量表和拉链表
- ios heic格式照片批量转jpg工具
热门文章
- 计算机网络技术教室场景,这到底是一间教室?还是一间计算机室?
- 川大计算机系1999级高伟,【求助】四川大学谁做计算的? - 量子化学 - 小木虫 - 学术 科研 互动社区...
- Java二维数组写古诗
- sql 2005基础语法总结
- Java SE 6 新特性: Instrumentation 新功能
- gdal支持Hammer投影的做法
- 电骡协议规范-第二章-客户端和服务器TCP通讯
- Hadoop中的FileInputFormat切片机制、FileInputFormat切片大小的参数配置、TextInputFormat、CombineTextInputFormat切片机制
- springboot整合shiro实现权限控制
- Vue 前端页面按钮权限控制