大家应该也知道百度搜索结果都会有一个百度快照,这是通过缓存服务器调用出来的页面信息,这样我们就可以通过百度快照快速的浏览网页信息,那么这个缓存服务器跟爬虫又有什么联系么?

我们来大致了解一下爬虫的基本原理(个人理解,有错误给予纠正)。首先搜索引擎是不会产生内容的,它的信息是通过爬虫把信息检索出来。爬虫通过域名URL获取到源代码,将页面内容存储到缓存服务器上同时建立索引。将下载下来的网页URL放进URL队列中,并记录避免重复抓取。然后在这个队列中检查URL,要是发现还没有被抓取就将这个URL放进待抓取队列中,在下次调度中下载这个URL相对应的网页。

首先我们需要一个jar包:jsoup-1.7.2.jar 这一个

package com.html;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

/**

*

* 利用java的Jsoup开发搜索引擎爬虫

* HtmlJsoup

* 创建人:youshangdetudoudou

* 时间:2014年9月9日-上午10:55:27

* @version 1.0.0

*

*/

public class HtmlJsoup {

/**

*

* 根据网址和页面的编码集获取网页的源代码

* 方法名:getHtmlResourceByURL

* 创建人:youshangdetudoudou

* 时间:2014年9月9日-上午11:01:22

* @param url 需要下载的url地址

* @param encoding 需要网页的编码集

* @return String 返回网页的源代码

* @exception

* @since  1.0.0

*/

public static String getHtmlResourceByURL(String url,String encoding){

//声明一个存储网页源代码的容器

StringBuffer buffer = new StringBuffer();

URL urlObj = null;

URLConnection uc = null;

InputStreamReader in = null;

BufferedReader reader = null;

//参数是网址。要try catch

try {

//建立网络连接

urlObj = new URL(url);

//打开网络连接

uc = urlObj.openConnection();

//建立网络的输入流

in = new InputStreamReader(uc.getInputStream(),encoding);

//缓冲写入的文件流

reader = new BufferedReader(in);

//临时变量

String tempLine = null;

//循环读取文件流

while((tempLine = reader.readLine())!=null){

buffer.append(tempLine+"\n");//循环不断的追加数据

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.err.println("connection timeout.....");

}finally{

if (in!=null) {

try {

in.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

return buffer.toString();

}

/**

*

* 通过图片地址批量下载图片到服务器的磁盘

* 方法名:downImages

* 创建人:youshangdetudoudou

* 时间:2014年9月9日-下午2:15:51

* @param imgURL

* @param filePath void

* @exception

* @since  1.0.0

*/

public static void downImages(String imgURL,String filePath){

String fileName = imgURL.substring(imgURL.lastIndexOf("/"));

//创建文件的目录

try {

File files = new File(filePath);

//判断是否存在文件夹

if(!files.exists()){

files.mkdir();

}

//获取图片文件的下载地址

URL url = new URL(imgURL);

//连接网络图片地址

HttpURLConnection uc = (HttpURLConnection)url.openConnection();

//获取连接的输出流

InputStream is = uc.getInputStream();

//创建文件

File file = new File(filePath+fileName);

//创建输出流,写入文件

FileOutputStream out = new FileOutputStream(file);

int i = 0;

while((i=is.read())!=-1){

out.write(i);

}

is.close();

out.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//java的入口函数

public static void main(String[] args){

System.out.println("haha");

//根据网址和网页的编码集 获取网页的源代码

String htmlResource = getHtmlResourceByURL("http://www.4399.com/","gbk");

//System.out.println(htmlResource);

//解析源代码

Document document = Jsoup.parse(htmlResource);

//获取网页的图片

Elements elements = document.getElementsByTag("img");

for(Element element : elements){

String imgSrc = element.attr("src");

String imgPath =imgSrc;

System.out.println("图片地址:"+imgSrc);

downImages(imgPath,"F:\\xfmovie\\images");

System.out.println("下载完成!!!!!!!!!");

}

//解析我们需要下载的内容部分

}

}

以上是获取http://www.4399.com/网页的源代码

以上是解析网页源代码其中的一部分截图。。。

以上是网页下载下来的图片。。。抓取成功。。

这是一个相对简单的抓取。。有时间up主会继续改善继续学习。。谢谢大家。。

本文出自 “忧伤的土豆饼” 博客,谢绝转载!

java爬移动端搜索引擎_尝试java开发搜索引擎爬虫相关推荐

  1. java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码

    CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...

  2. java爬取网页数据_如何使用爬虫工具采集数据

    网络爬虫是一种按照一定规则,自动抓取万维网数据的脚本.按照一定规则,指的是爬虫程序需要解析网页的dom结构,针对dom结构爬取自己感兴趣的数据. (图1) 这就是一个网页源码的dom结构,我们需要一级 ...

  3. java 取栈顶元素_《Java实战之内存模型》详解篇

    内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的高效稳定运行 不同的JV ...

  4. java 堆大小的最大值_优化Java堆大小的5个技巧

    优化Java堆大小的5个技巧 摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一 ...

  5. java 三个版本区别_关于java三个版本的区别

    Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE.这三块相互补充,应用范围不同. * Java SE(Java Platform,Standard Edition).Java ...

  6. java 多态判断非空_收藏Java 面试题全梳理

    脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...

  7. java使用迭代器删除元素_使用Java从地图中删除元素

    java使用迭代器删除元素 关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于 ...

  8. java使用缓冲区读取文件_在Java中使用Google的协议缓冲区

    java使用缓冲区读取文件 最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 . 在此版本中,显然存在与Java 7 , ...

  9. java se好用吗_利用 Java SE 7 更好地管理资源

    2011 年 5 月发布 作者:Julien Ponge 本文介绍 Java 7 针对自动资源管理问题给出的解决办法,即 Coin 项目中提出的新语言结构 try-with-resources 语句. ...

最新文章

  1. React-Native android在windows下的踩坑记
  2. [SOJ] 简单哈希
  3. cpp 怎么连接mysql_C++连接mysql数据库的两种方法
  4. SAP OData服务的catalog service
  5. 具有外部Zookeeper集成并使用SOLRJ API访问数据的SOLR cloud 7.4集群配置
  6. *p++和*++p_2020年P气瓶充装新版试题及P气瓶充装找答案
  7. JavaScript 编程精解 中文第三版 翻译完成
  8. eslint配置及rule解释
  9. 易语言取MySQL错误代码,易语言中“取错误码”命令详解
  10. s40之演变v1~v3
  11. 前端中那些让你头疼的英文单词
  12. 4 基于pyecharts的python数据可视化——散点图和折线图的绘制
  13. 用Cython加密Python代码这么简单
  14. 厚积薄发 臻于至善,用友U9 cloud“王者归来”
  15. 计算机文档字体替换,在word中巧妙使用字体替换
  16. 查看linux服务器存储空间状况
  17. c语言将矩形分成多个小正方形,蓝桥杯练习算法题(矩形切割成正方形)
  18. 浏览器最小字体为12px以及解决方法
  19. war包放入tomcat中无法自动解压
  20. root大师电脑版 v1.7.6.6640 官网最新版

热门文章

  1. TiDB at ZaloPay Infrastructure Lesson Learned
  2. 黄鸟抓包app(httpcanary)
  3. gin实现简易服务器
  4. 8、JAVA入门——switch选择结构
  5. 统信软件根社区斩获CSDN两项大奖
  6. Windows Server之浅谈SMB以及SMB小案例分享
  7. kali Linux的 安装详细步骤
  8. Filament 渲染引擎剖析 之 多线程渲染 2
  9. python实现DBSCAN聚类
  10. iis 7 windows server 64bit