Java开发搜索引擎爬虫
package com.peidon.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.URL;
import java.net.URLConnection; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; /**
* @author sunshine
* @version 1.0
* @date:2015年8月15日 上午9:01:13
* @description: Java开发搜索引擎爬虫
* jsoup 类似jQuery的强大功能,什么方便解析操作HTML DOM 树
* 关联jar包 jsoup-1.8.3.jar
*/
public class HttpSoup { public static void main(String[] args) { //根据网址和页面的编码集 获取网页的源代码
String htmlResource = getHtmlResourceByUrl("http://www.ui.cn/", "UTF-8");
//System.out.println(htmlResource); //解析源代码
Document document = Jsoup.parse(htmlResource); //获取网页的图片
//网页图片标签<img src="" alt="" width="" height="" />
Elements elements = document.getElementsByTag("img"); for(Element element : elements){
String imgSrc = element.attr("src");
//System.out.println(imgSrc);
downImages(imgSrc,"D:\\test\\images\\");
System.out.println("下载成功:"+imgSrc);
//System.out.println(imgSrc.substring(imgSrc.lastIndexOf("/")));
}
} /**
* 根据一个图片的URL地址,通过这个URL批量下载图片到服务器的磁盘
* @param imageUrl 要下载的服务器地址
* @param filePath 下载完成后保存到服务器的图片地址
*
*/
public static void downImages(String imageUrl, String filePath){
String fileName = imageUrl.substring(imageUrl.lastIndexOf("/")); try {
//创建文件的目录
File files = new File(filePath);
//判断文件是否存在
if(!files.exists()){
files.mkdirs();
}
//获取图片文件的下载地址
URL url = new URL(imageUrl);
//连接网络图片地址
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) {
e.printStackTrace();
}
} /**
* 根据网址和页面的编码集 获取网页的源代码
* @param url
* @param encoding
* @return
*/
public static String getHtmlResourceByUrl(String url, String encoding){ //声明一个存储网页源代码的容器
StringBuffer buff = new StringBuffer(); URL urlObj = null;
URLConnection uc = null;
InputStreamReader in = null;
BufferedReader reader = null;
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){
buff.append(tempLine + "\n"); //循环追加数据
} } catch (Exception e) { e.printStackTrace();
System.out.println("Conection timeout ...");
} finally {
if(in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
} } return buff.toString();
}
}
Java开发搜索引擎爬虫的更多相关文章
- Java开发、网络爬虫、自然语言处理、数据挖掘简介
一.java开发 (1) 应用开发,即Java SE开发,不属于java的优势所在,所以市场占有率很低,前途也不被看好. (2) web开发,即Java Web开发,主要是基于自有或第三方成熟框架的系 ...
- java开发爬虫Deno
java开发爬虫Deno 身为一个程序员不会两三手爬虫怎么能在行业里立足啊,这是开发中自己写的一个java爬虫的Demo,供大家参考. java爬虫的开发依赖于jsoup.jar 直接上代码 publ ...
- Python分布式爬虫开发搜索引擎 Scrapy实战视频教程
点击了解更多Python课程>>> Python分布式爬虫开发搜索引擎 Scrapy实战视频教程 课程目录 |--第01集 教程推介 98.23MB |--第02集 windows下 ...
- 9个基于Java的搜索引擎框架
在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广 ...
- 阿里巴巴Java开发规范手册
Java开发手册 版本号 制定团队 更新日期 备 注 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向Java业界公开 一.编程规约 (一) 命名规约 1. [强制]所有编程相关命 ...
- 9个基于Java的搜索引擎
1.Java 全文搜索引擎框架 Lucene 毫无疑问,Lucene是目前最受欢迎的Java全文搜索框架,准确地说,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Luc ...
- 阿里巴巴 JAVA 开发手册
阿里巴巴 JAVA 开发手册 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向 Java 业界公开 一. 编程规约(一) 命名规约1. [强制]所有编程相关命名均不能以下划线或美元符号开始, ...
- [转]9个基于Java的搜索引擎框架
9个基于Java的搜索引擎框架 在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的 ...
- 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo
简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...
随机推荐
- lr常用
一.检查点的手动添加 2.关联手工添加:
- JavaScript设计模式——状态模式
状态和行为: 所谓对象的状态,通常指的就是对象实例的属性的值:而行为指的就是对象的功能,再具体点说,行为大多可以对应到方法上. 状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应 ...
- 【JavaScript】变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级
参考资料http://caibaojian.com/toutiao/5446 1.所有变量声明(var)或者声明函数都会被提升到当前函数顶部 关于函数表达式,js会将代码拆分为两行代码分别执行.这里需 ...
- POJ 2549 二分+HASH
题目链接:http://poj.org/problem?id=2002 题意:给定一个n个数字组成的序列,然后求出4个数使得a+b+c=d,求d的最大值.其中a,b,c,d要求是给定序列的数,并且不能 ...
- 《DSP using MATLAB》示例Example4.13
代码: b = [1, 0, -1]; a = [1, 0, -0.81]; % [R, p, C] = residuez(b,a); Mp = (abs(p))' Ap = (angle(p))'/ ...
- python 代码片段19
#coding=utf-8 # 函数 def foo(x): print x foo(123) # import httplib def check_web_server(host,port,path ...
- XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
A. RPG 首先计算出每个技能对于每个属性值的可行区间,若区间为空则不合法. 枚举两个技能,以及每个属性值,根据区间的关系可以得到哪个必须要在另一个之前学,连边看看是否有环即可. 时间复杂度$O(n ...
- POJ 3320 (尺取法+Hash)
题目链接: http://poj.org/problem?id=3320 题目大意:一本书有P页,每页有个知识点,知识点可以重复.问至少连续读几页,使得覆盖全部知识点. 解题思路: 知识点是有重复的, ...
- hdu1019 Least Common Multiple
Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...
- Linq to DataTable 左连接
所先创建2个DataTable并对其赋值,来进行模拟. DataTable dt1 = new DataTable(); dt1.Columns.Add("ID", typeof( ...