- 浏览: 3558935 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.params.ConnPerRouteBean;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
public class Crawler implements Runnable{
public static String SAVE="C:/Users/Administrator/Downloads";//下载保存路径
private String url="";//要抓取的网页地址
public Crawler(String url){
this.url=url;
}
public Crawler(){}
/**
*
* @param url 要抓取的网页的地址
* @return 这个对应的内容
* @throws ClientProtocolException
* @throws IOException
*/
private String crawl(String url) throws ClientProtocolException, IOException{
System.out.println("[INFO] Crawl From : "+url);
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet=new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity=httpResponse.getEntity();
InputStream inStream=httpEntity.getContent();
String content="";
while(true){
byte[] bytes=new byte[1024*1000];
int k=inStream.read(bytes);
if(k>=0)content=content+new String(bytes,0,k);
else break;
System.out.println(content);
System.out.println("=========================================================================================");
}
return content;
}
public void run(){
try {
String prefix=this.url.substring(0,this.url.lastIndexOf("/"));
String content=this.crawl(this.url);//抓取网页内容
Parser parser=new Parser(content); //使用HTMLParser对网页内容进行解析
NodeFilter filter;
NodeList list;
filter=new NodeClassFilter(LinkTag.class);
filter=new AndFilter(filter,new NodeFilter(){
public boolean accept(Node node) {
return ((LinkTag)node).isHTTPLink();
}});
list=parser.extractAllNodesThatMatch(filter);
List<String> urlsList =new ArrayList<String>();
for(int i=0;i<list.size();i++){
String[] array=list.elementAt(i).getText().split("\"");
if(array[1].endsWith(".pdf")||array[1].endsWith(".PDF")){//只下载pdf
String downloadUrl=new String(prefix+"/"+array[1]);
urlsList.add(downloadUrl);//生成需要下载的地址
}
}
//从这里开始是进行下载,使用了多线程执行请求
HttpParams params=new BasicHttpParams();
//ConnManagerParams.setTimeout(params, 60000*3); //设置连接最大等待时间
ConnManagerParams.setMaxConnectionsPerRoute(params, new ConnPerRouteBean(50));//设置并发数
//HttpConnectionParams.setConnectionTimeout(params, 60000*2); //设置连接超时时间
HttpConnectionParams.setSoTimeout(params, 60000*10);//设置读取超时时间
SchemeRegistry schemeRegistry=new SchemeRegistry();
schemeRegistry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(),80));
schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ThreadSafeClientConnManager cm=new ThreadSafeClientConnManager(params,schemeRegistry);
HttpClient httpClient=new DefaultHttpClient(cm,params);
Thread[] threads=new Thread[urlsList.size()];
int n=0;
for(String url:urlsList){
String path=Crawler.SAVE+url.substring(url.lastIndexOf("/"), url.length());
url=url.substring(0, url.lastIndexOf("/"))+"/"+URLEncoder.encode(url.substring(url.lastIndexOf("/")+1,url.length()),"UTF-8");
HttpGet httpGet=new HttpGet(url);
threads[n]=new Thread(new Downloader(httpClient,httpGet,url,path));
n++;
}
for(Thread thread:threads)thread.start();
for(Thread thread:threads)if(thread.isAlive())thread.join();
}catch (InterruptedException e) {
System.out.println("[ERROR] Download InterruptedException : "+e.toString());
//e.printStackTrace();
} catch (ParserException e) {
System.out.println("[ERROR] Parse ParserException : "+e.toString());
//e.printStackTrace();
}catch (ClientProtocolException e) {
System.out.println("[ERROR] Crawl ClientProtocolException : "+e.toString());
//e.printStackTrace();
} catch (IOException e) {
System.out.println("[ERROR] Crawl IOException : "+e.toString());
//e.printStackTrace();
}
}
public static void main(String[] args) {
//入口程序
Crawler crawler=new Crawler("http://www3.tjcu.edu.cn/wangshangketang/yuanneike/guanlixue/sjxz.htm");//这里设定网页地址
Thread thread=new Thread(crawler);
thread.start();
}
}
//类Downloader真正的执行了写入网络数据到文件的步骤
class Downloader implements Runnable{
private String url="";
private String path="";
private final HttpClient httpClient;
private final HttpContext httpContext;
private final HttpGet httpGet;
/**
*
* @param httpClient 多个线程共享的HtppClient
* @param httpGet 要下载的HttpGet
* @param url 资源网络地址
* @param path 资源下载之后本地的保存路径
*/
public Downloader(HttpClient httpClient,HttpGet httpGet,String url,String path){
this.httpClient=httpClient;
this.httpGet=httpGet;
this.httpContext=new BasicHttpContext();
this.path=path;
this.url=url;
}
public void run() {
System.out.println("[INFO] Download From : "+this.url);
File file=new File(this.path);
if(file.exists())file.delete();
try {
//使用file来写入本地数据
file.createNewFile();
FileOutputStream outStream = new FileOutputStream(this.path);
//执行请求,获得响应
HttpResponse httpResponse = this.httpClient.execute(this.httpGet,this.httpContext);
System.out.println("[STATUS] Download : "+httpResponse.getStatusLine()+" [FROM] "+this.path);
HttpEntity httpEntity=httpResponse.getEntity();
InputStream inStream=httpEntity.getContent();
while(true){//这个循环读取网络数据,写入本地文件
byte[] bytes=new byte[1024*1000];
int k=inStream.read(bytes);
if(k>=0){
outStream.write(bytes,0,k);
outStream.flush();
}
else break;
}
inStream.close();
outStream.close();
} catch (IOException e){
this.httpGet.abort();
System.out.println("[ERROR] Download IOException : "+e.toString()+" [FROM] : "+this.path);
//e.printStackTrace();
}
}
}
相关推荐
在Java环境中,我们可以使用诸如Jsoup、Apache HttpClient、HtmlUnit等库来构建爬虫。这些库提供了方便的API,让开发者可以轻松处理HTTP请求、解析HTML文档以及提取有用的数据。 首先,书中会介绍爬虫的基础知识,...
### Java网络爬虫简单实现知识点解析 #### 一、概览 本文档旨在解析一份关于“Java网络爬虫简单实现”的文档,该文档通过几个关键类的介绍来讲解如何使用Java语言开发一个基本的网络爬虫。网络爬虫是一种自动化的...
根据提供的文件信息,文档标题为“java爬虫抓取网页数据教程”,此文件属于IT技术类教程,特别关注于Java编程语言在编写网络爬虫方面的应用。在这份教程中,将会涉及到使用HttpClient工具在Java环境中抓取网页数据的...
使用Apache Hadoop或Apache Spark构建分布式爬虫系统,可以大幅度提高抓取效率,处理大规模数据。此外,数据库管理也是重要环节,如MySQL、MongoDB等,用于存储和检索抓取的数据。 最后,我们将探讨爬虫的伦理与...
Apache HttpClient是一个支持HTTP协议的客户端工具,被广泛应用于Java爬虫开发中,帮助开发者实现网络请求与响应的处理。在本文中,将会涉及如何利用HttpClient发送GET请求,获取网页内容以及对返回结果进行处理的...
这个压缩包包含两份文档,一份是.docx格式,一份是.pdf格式,两者内容相同,都是关于HttpClient 4.3的中文版指南。 HttpClient的核心功能在于它能够创建和管理HTTP连接,发送请求,接收响应,并支持各种HTTP方法如...
5. **网络请求库**:Java中的HttpURLConnection、Apache HttpClient或OkHttp等库用于发送HTTP请求,获取网页内容。理解这些库的使用方法对于编写爬虫至关重要。 6. **多线程与并发**:为了提高爬虫效率,通常会使用...
在Java中,可以利用丰富的第三方库,如Jsoup、Apache HttpClient、Gson等,来简化网络爬虫的开发过程。 【压缩包子文件的文件名称列表】:由于只有一个“201_迷你网络爬虫”文件名,我们可以假设这个文件可能是一个...
Apache HttpClient是Apache软件基金会的一个开放源代码项目,它提供了一个Java API来实现HTTP协议,使得开发者可以方便地在Java应用程序中进行HTTP通信。这个压缩包包含`org.apache.http`包的完整库(lib)和源码,...
本资料中的"自己动手写网络爬虫PDF+源码"包含了一个实际的Java爬虫项目。通过阅读PDF教程和分析源码,你可以了解到如何构建一个简单的爬虫,例如: 1. 定义目标网站:确定要爬取的网页,分析其结构。 2. 发送HTTP...
对于更复杂的网络环境和HTTP请求处理,可以使用Apache的HttpClient库,它提供了丰富的功能,如设置代理、处理HTTP状态码、支持HTTPS等,使得网络爬虫的开发更为高效和便捷。 网络爬虫的实现涉及到网络协议的理解、...
7. **Apache HttpClient 库的功能**: - 支持各种 HTTP 特性,如重定向、cookies、HTTP/1.1、HTTPS、连接池管理等。 - 提供了丰富的 API 用于创建和配置请求,处理响应,以及对请求头和实体的精细控制。 - 可以...
Java爬虫可以利用HttpURLConnection或HttpClient库进行网络请求,Jsoup库进行HTML解析,以及正则表达式或第三方库如Apache Tika进行文本提取。 网络爬虫的工作流程大致如下: 1. **初始化**:确定目标网站,设置...
- **HttpURLConnection** 或 **Apache HttpClient**:用于发送HTTP请求和处理响应,这两个库提供了丰富的功能来定制请求头、超时设置等。 - **Java Collections Framework**:如ArrayList、HashMap等,用于管理URL和...
2. **Java库的使用**:Java有许多用于爬虫开发的库,如Jsoup用于解析HTML,Apache HttpClient进行网络请求,或者使用更复杂的库如WebMagic或Scrapy-Java来构建完整的爬虫框架。 3. **异步与多线程**:为了提高爬虫...
5. 库的使用:如使用Jsoup、Apache HttpClient等第三方库进行网络请求和HTML解析。 6. 日志管理:记录爬虫运行过程中的信息,便于调试和问题定位,如Log4j或SLF4J。 这个项目将涵盖从网络请求到数据提取的全过程,...
- **Fetch HTTP**:利用Apache HttpClient库处理http:开头的URL。 - **Fetch FTP**:抓取FTP内容,需要远程服务器支持NLIST命令。 - **Fetch Stats**:收集主机、端口或边界的统计信息。 - **BDB Cookie Storage...
在Java中实现爬虫,我们可以利用各种库和框架,如Jsoup、Apache HttpClient、WebMagic等,来高效地解析HTML和处理网络请求。 在给定的描述中提到了"com.zhy.spider.test"包下的一个测试类。这暗示了可能有一个名为...
标题 "使用HttpClient和iText下载slideshare上的文档" 涉及到两个主要的Java库:Apache HttpClient和iText。这两个库在IT行业中是处理网络请求和PDF文档操作的重要工具。 HttpClient是Apache的一个开源项目,它提供...