200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java爬虫编写步骤_JAVA爬虫--编写第一个网络爬虫程序

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

时间:2023-02-10 15:17:43

相关推荐

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

JAVA爬虫–编写第一个网络爬虫程序

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

目标通过Java程序采集URL地址,并获取地址中的标题,发布时间,正文内容,并把采集的内容保存到本地文件中。

准备工作1.jdk1.6以及以上

2.eclipse

3.URL地址:/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

* @创建时间 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 .MalformedURLException;

import .URL;

import .URLConnection;

/**

*

* @author binggong

* @创建时间 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

* @创建时间 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("/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("/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-/0106161404304?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ29uZ2Jpbmc3OTg5MzAxMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。