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 DownSinaBook {
public static void main(String[] args) {
String strUrl = "http://vip.book.sina.com.cn/book/catalog.php?book=79464";
String filePath = "./tmpdown/";
DownSinaBook downBook = new DownSinaBook();
try {
downBook.startDownload(strUrl, 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 {
// 下载目录文件
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));
// <a href="(chapter_79464_\d+\.html)"[^<]*title="(.*)">
String strPattern = "<a href=\"(chapter_" + bookId + "_\\d+\\.html)\"[^>]*title=\"(.*)\">";
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);
this.downloadFile(rootUrl + 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 {
String strPattern = "<div id=\"contTxt\"[^>].*?>(.*)</div>";
Pattern pattern = Pattern.compile(strPattern, Pattern.DOTALL);
Matcher matcher = pattern.matcher("");
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.reset(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电子书搜索引擎...
Kindle电子书下载资源网站汇总【精华第二季】是用户收藏的一份电子书下载资源网站大全,涵盖了多种类型的电子书下载网站,包括搜索引擎、免费电子书下载网站、在线资料分享站等。用户根据个人喜好推荐了多个优秀的...
超级抓书狂3.0可以把各大读书网站如新浪读书、搜狐读书等的在线书直接抓取为TXT文本文件保存到本地硬盘,以便在电脑、掌上电脑和支持电子书的手机、mp3、mp4上离线观看。用超级抓书狂抓书看比用手机gprs上网看书省钱...
软件名称:新浪共享资料免积分下载% p+ a M6 \( y1 B1 A2 U5 S 软件大小:32K 软件说明: 该软件能够免登陆、免积分下载新浪共享资料上的部分资源,特别是...2、下载的资源可能是近几天才上传的,新浪暂时未开放下载;
新浪微盘是一款网络硬盘,支持电脑及移动客户端,可以自动同步、备份数据,支持web网页访问,随时随地上传、下载数据。 微盘是新浪微博小助手--与你的微博帐号绑定,可将本地文件方便的分享到微博,便于你的微博粉丝...
2. Amazon 官方推荐的免费电子书下载网站(http://www.amazon.com/b?ie=UTF8&node=2245146011):Amazon 官方推荐的免费电子书下载网站,提供了大量免费电子书资源。 3. Internet Archive(http://www.archive.org/...
【新浪爱问资料下载器】是一款专为用户设计的工具,用于方便地从新浪爱问平台下载各种资源,包括但不限于电子书、文档、教程等。它简化了原本可能复杂繁琐的下载过程,使得用户能够更高效地获取所需信息。 【标签】...
《Puppet权威指南》是一本深入探讨Puppet自动化运维工具的专业书籍,由腾讯高级运维工程师倾力撰写,并得到了腾讯、百度、阿里巴巴、新浪等国内顶尖互联网企业的总监级运维专家的高度认可和联合推荐。这本书旨在帮助...
总的来说,电子书营销是一种极具性价比的推广策略,尤其对于阿里巴巴、百度、新浪等知名企业来说,它已经成为其营销组合中不可或缺的一部分。通过精心策划和执行,电子书营销能够帮助企业建立品牌形象,提升知名度,...
在新浪爱问资料里,经常会下载到EXE格式的电子书,在电脑上运行是没问题,但是如果想要在手机/MP3或MP4里阅读,就没得法子了。今天,小编就跟大家分享一款可以将EXE电子书转为TXT格式的软件miniKillEBook。 ...
新浪电子书共享 - **平台介绍**:这是一个提供了大量免费电子书下载服务的平台,用户可以在该平台上找到各种类型的电子书籍,数量超过数十万册。 - **适用人群**:适合学生、研究者、自我学习者以及对特定领域感...
它允许用户高效地从各种知名的博客平台上下载文章,如csdn、博客园、ITEYE、新浪、搜狐和开源中国等。这些博客平台汇聚了众多专业人士的技术分享和见解,是获取IT知识的重要来源。 批量下载功能是这个工具的一大...
\n\n此外,还有网络中国电子图书搜索引擎、指针图书搜索、新浪读书搜索、搜狐读书频道图书搜索等,它们分别提供了不同的图书检索和阅读体验。文学小说网站大全和天涯在线书库则聚集了大量的文学作品供读者浏览和阅读...
新浪微博备份软件可以备份新浪微博,自动制作漂亮的微博电子书 可用于保存有意义的新浪微博了。
用户可以将设计作品一键分享到新浪微博、腾讯微博、人人网……创意在分享中互动,在互动中升华。 一张照片只能代表生活的点滴,而一本画册能串成没有断点的记忆……有图,伴您成长:无论孩子的出生和成长、婚礼...