package test;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 下载新浪书籍
*
* @author kinkding
* @history 2009-7-14
*/
public class DownEBook {
// 新浪
// private String hrefPattern = "<a href=\"(chapter_${bookId}_\\d+\\.html)\"[^>]*title=\"(.*)\">";
// private String ctntPattern = "<div id=\"contTxt\".*?>(.*?)</div>";
// private String bookUrl = "http://vip.book.sina.com.cn/book/catalog.php?book=37495";
// QQ
private String hrefPattern = "<a href=\"javascript:opennew\\('(${rootUrl}\\d{1,2}\\.shtml)'\\)\"[\\s]?>([^<]*)</a>";
private String ctntPattern = "<div id=\"content\".*?>(.*?)</div>";
private String bookUrl = "http://book.qq.com/s/book/0/17/17572/index.shtml";
public static void main(String[] args) {
String filePath = "./tmpdown/";
DownEBook downBook = new DownEBook();
try {
downBook.startDownload(downBook.bookUrl, filePath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 开始下载
*
* @param filePath
* @param bookid
* @return
* @throws IOException
*/
protected int startDownload(String strUrl, String filePath) throws IOException {
// 创建临时文件夹
File tempFile = new File(filePath);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
// 下载目录文件
SimpleDateFormat sdf = new SimpleDateFormat("MMdd-HH-mm-ss");
String fileName = filePath + sdf.format(new Date()) + ".html";
downloadFile(strUrl, fileName);
String rootUrl = strUrl.substring(0, strUrl.lastIndexOf('/') + 1);
String bookId = strUrl.substring(strUrl.indexOf('=') + 1);
File f = new File(fileName);
BufferedReader reader = new BufferedReader(new FileReader(f));
String strpattern = hrefPattern.replaceAll("\\$\\{rootUrl\\}", rootUrl);
strpattern = strpattern.replaceAll("\\$\\{bookId\\}", bookId);
Pattern pattern = Pattern.compile(strpattern);
Matcher matcher = pattern.matcher("");
String line = null;
Map<String, String> fileMap = new HashMap<String, String>();
while ((line = reader.readLine()) != null) {
matcher.reset(line);
if (matcher.find()) {
System.out.println(matcher.group(1) + ", " + matcher.group(2));
fileMap.put(matcher.group(1), matcher.group(2));
}
}
reader.close();
int total = fileMap.size();
int i = 0;
for (String urlName : fileMap.keySet()) {
String name = fileMap.get(urlName);
System.out.println(++i + "/" + total + ":" + name);
urlName = urlName.startsWith("http") ? urlName : (rootUrl + urlName);
this.downloadFile(urlName, filePath + "/" + name);
this.geneTxt(filePath + "/" + name);
}
if (total > 0) {
f.delete();
}
return total;
}
/**
* 下载文件(返回文件名)
*
* @param strUrl
* @param filePath
* @return
* @throws IOException
*/
private String downloadFile(String strUrl, String fileName) throws IOException {
URL url = new URL(strUrl);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 模拟浏览器的访问
urlConn
.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1");
urlConn.setRequestProperty("Accept-Language", "zh-cn,zh;q=0.5");
// urlConn.setRequestProperty("Accept-Encoding", "gzip,deflate");
urlConn.setRequestProperty("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
urlConn.setRequestProperty("Keep-Alive", "300");
urlConn.setRequestProperty("Connection", "keep-alive");
urlConn.setRequestProperty("Cache-Control", "max-age=0");
urlConn.setRequestProperty("Referer", strUrl);
urlConn.connect();
BufferedInputStream bis = new BufferedInputStream(urlConn.getInputStream());
FileOutputStream fos = new FileOutputStream(fileName);
byte[] buf = new byte[1024];
int len = 0;
while ((len = bis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.close();
bis.close();
urlConn.disconnect();
return fileName;
}
/**
* 抽取文本
*
* @param fileName
* @throws IOException
*/
private void geneTxt(String fileName) throws IOException {
Pattern pattern = Pattern.compile(ctntPattern, Pattern.DOTALL);
File f = new File(fileName);
BufferedReader reader = new BufferedReader(new FileReader(f));
String line = null;
StringBuffer content = new StringBuffer(512);
while ((line = reader.readLine()) != null) {
content.append(line.trim());
}
reader.close();
Matcher matcher = pattern.matcher(content);
String words = "";
if (matcher.find()) {
words = matcher.group(1);
}
if (words != null && words.length() > 0) {
f.delete();
FileWriter fw = new FileWriter(new File(fileName + ".txt"));
fw.write(words);
fw.flush();
fw.close();
}
}
}
分享到:
相关推荐
"Kindle电子书下载资源网站汇总【精华第二季】" 本资源汇总了多个电子书下载资源网站,主要面向Kindle用户,旨在提供方便的电子书下载体验。以下是资源汇总的详细介绍: 首先,推荐一个Kindle电子书搜索引擎...
电子书下载的费用为每册5.1元,纸质书的价格则根据页数不同而变化,从最低的38元(20页以内含邮费)到最高的658元(900页以上含邮费)不等。新推出的QQ空间照片书制作工艺更加精致,价格也因此有所提高,例如,10页...
支持国内各个大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等,本软件支持的详细博客列表见附录,会不断添加新的博客。 (+)支持多种微博 支持多种微博,包括新浪微博,搜狐微博,腾讯...
geotools中文资料,我学习时候,整理的资料, 另外我的新浪博客,有关于...欢迎下载,大家一起学习,我建了个gis群 291301205 新浪 http://blog.sina.com.cn/skywalkershaka 因为我下资源 要分 所以设置了1分 希望谅解
《电子商务成功必修课—蒋晖》是一本由网络营销专家蒋晖撰写的电子书,旨在为初涉电子商务领域的创业者提供实战指南。蒋晖,作为南京利为汇信息技术有限公司的创始人,凭借自身丰富的经验和深刻的洞察力,系统性地...
豆约翰博客备份专家是用法简单,功能强大的博客备份工具,博客电子书(PDF,CHM,WORD和TXT)生成工具,博文离线浏览工具,软件界面美观大方,支持多个主流博客网站(新浪微博,腾讯说说,QQ空间,新浪博客,宝宝树...
主要内容包括:第1章 Nginx简介;第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;...第5章Nginx与JSP、ASP.NET.....第7章Nginx 的rewrite规则与实例;...第9章Nginx 的web缓存服务与新浪网的开源NCACHE模块等
支持国内各个大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等。目前总共支持50个博客,详细目录附后。 微博备份 支持四大微博:新浪微博,搜狐微博,腾讯微博,网易微博。 支持多种读书...
支持国内所有大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等。目前总共支持49个博客,详细目录附后。 **丰富的导出格式 可以把下载的博客文章导出为流行的文档格式,包括经典的电子书chm...
11. **电子书下载推广**:将网站内容整理成电子书,提供下载,其中嵌入网站信息。 12. **博客推广**:针对热门关键词撰写文章,发布到各大博客平台,同时附带网站链接。 13. **网摘推广**:在poco网摘、天极网摘、...
支持国内各个大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等,本软件支持的详细博客列表见附录,会不断添加新的博客。 支持四大微博 支持四大微博:新浪微博,搜狐微博,腾讯微博,...
此外,常用的聊天工具如腾讯QQ、新浪UC、YY语音、53KF和旺客,满足了不同场景下的即时通讯需求。 在网络安全方面,360安全卫士、金山毒霸、ESET NOD32和AVAST等免费杀毒软件为用户的电脑提供了防护屏障。软件下载...
豆约翰博客备份专家是完全免费,功能强大的博客备份工具,博客电子书(PDF,CHM和TXT)生成工具,博文离线浏览工具,软件界面美观大方,支持多个主流博客网站(QQ空间,百度空间,新浪博客,网易博客,豆瓣日记,...
11. **下载推广**:制作包含网站信息的电子书供人下载,提升网站知名度。 12. **博客推广**:根据热门关键词创作内容,同时提及网站,发布到各大博客平台。 13. **网摘推广**:在知名网摘网站推荐自己的网页,如...
1. **网摘**:将优质内容提交到网摘站,如365key、新浪vivi,获得推荐可带来流量。 2. **书签收藏**:鼓励用户将企业网站添加到百度搜藏、QQ书签等,提高网站的回访率。 3. **顶客网站**:在digg类网站提交内容,...
亦可监控指定网站并在数据改变的时候够自动通过多种方式(MSN/ICQ/QQ/Jabber/电子邮件/手机短信/飞信/网络接口请求/信使服务/Web服务/各种数据库/文件/系统日志/系统声音/注册表/博客/Twitter/饭否/嘀咕/火兔/同学/做...
- **网摘和书签**:在网摘网站和社交书签平台分享网站内容,如365key、新浪vivi、百度收藏、QQ书签等。 9. **广告投放**: - **软文广告**:在相关网站发布含有企业信息的文章。 - **竞价广告**:参与百度、谷歌...
豆约翰博客备份专家[1]是完全免费,功能强大的博客备份工具,博客电子书(PDF,CHM和TXT)生成工具,博文离线浏览工具,软件界面美观大方,支持多个主流博客网站(QQ空间,百度空间,新浪博客,网易博客,豆瓣日记,...
1. **云计算特点**:云计算提供按需使用、可扩展的服务,具有公共事业性质,例如社区QQ群功能,可将网站内容推送至指定QQ群,增强用户互动。 2. **优势**:与传统IT相比,云计算具有快速扩容、低门槛、低成本的优势...