首页 > 编程知识 正文

爬虫开发的流程,网络爬虫 python java

时间:2023-05-06 10:17:24 阅读:59854 作者:3592

JAVA爬虫创建第一个互联网爬虫程序

上一章介绍了XPATH的基础语法。 本章用手编写第一个爬行器程序。 另外,希望通过这个爬虫程序,熟悉上一章学到的XPATH的基础语法,可以在实战中运用。

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

准备工作1.jdk1.6以上

2.eclipse

3.URL地址:3358 blog.csdn.net/gong bing 798930123/article/details/7895597

4.htmlcleaner.jar

HtmlCleaner包概述HtmlCleaner是开源Java语言的Html文档效应器。 HtmlCleaner会刷新HTML文档中的每个元素,以生成结构良好的“欢迎”HTML文档。

默认情况下,它类似于大多数web浏览器用于文档对象创建模型的规则。 但是,用户可以提供自定义tag和规则集进行过滤和匹配。 它被设计成小、快、灵活、独立。 对于命令行工具和Ant任务,HtmlCleaner还可以在Java代码中使用。 分析后对轻量级文档对象进行编程可以方便地转换为DOM或JDom标准文档,也可以通过多种方式(压缩、打印)连续输出XML。

简单来说,HtmlCleaner可以将我们下载的Html内容转换为DOM对象。 此Jar包还提供了XPATH分析的API,有助于在XPATH上分析收集的web内容。

代码示例:

DataBean.java :包含标题、正文和发行时间的实体类

package com.demo;

//*

*

* @author binggong

@制作时间2018年1月4日下午10:18:26

* @微信公众号:DT数据技术博文

* @tag:包含标题、正文和发布时间的实体类

*/

公共类数据数据库{

//*

*标题

*/

私有字符串标题;

//*

*发布时间

*/

私密字符串pubtime;

//*

*正文内容

*/

私有字符串上下文;

公共数据库

super (;

}

公共数据库(字符串title,字符串pubtime,字符串上下文) {

super (;

this.title=title;

this.pubtime=pubtime;

this.context=context;

}

公共字符串获取

返回标题;

}

publicvoidsettitle (字符串标题) {

this.title=title;

}

公共字符串get pubtime

返回行程;

}

publicvoidsetpubtime (字符串pubtime ) {

this.pubtime=pubtime;

}

公共字符串获取上下文(

返回上下文;

}

publicvoidsetcontext (字符串上下文) {

this.context=context;

}

}

download html.Java :下载web内容

package com.demo;

import java.io.BufferedReader;

import java.io.InputStream;

import Java.io.input streamreader;

import Java.net.malformedurlexception;

import java.net.URL;

import java.net.URLConnection;

//*

*

* @author binggong

* @创建时间2018年1月5日下午9:25:31

* @微信公众号:DT数据技术博文

* @ tag :网络内容下载

*/

公共的

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)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。