`
kinkding
  • 浏览: 148287 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

新浪电子书下载2

阅读更多
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();
		}
	}
}
 
分享到:
评论

相关推荐

    抓书狂软件 电子书下载软件 实用 免费

    超级抓书狂3.0可以把各大读书网站如新浪读书、搜狐读书等的在线书直接抓取为TXT文本文件保存到本地硬盘,以便在电脑、掌上电脑和支持电子书的手机、mp3、mp4上离线观看。用超级抓书狂抓书看比用手机gprs上网看书省钱...

    新浪共享资料免积分下载

    软件名称:新浪共享资料免积分下载% p+ a M6 \( y1 B1 A2 U5 S 软件大小:32K 软件说明: 该软件能够免登陆、免积分下载新浪共享资料上的部分资源,特别是...2、下载的资源可能是近几天才上传的,新浪暂时未开放下载;

    微盘(新浪微盘) v2.5.2.zip

    新浪微盘是一款网络硬盘,支持电脑及移动客户端,可以自动同步、备份数据,支持web网页访问,随时随地上传、下载数据。 微盘是新浪微博小助手--与你的微博帐号绑定,可将本地文件方便的分享到微博,便于你的微博粉丝...

    Puppet权威指南 PDF电子书下载 带书签目录 完整版

    腾讯高级运维工程师撰写,腾讯、百度、阿里巴巴、新浪等多家企业总监级运维专家高度认可并联袂推荐

    miniKillEBook(exe电子书反编译软件)v.07 EXE电子书转为TXT格式.zip

    在新浪爱问资料里,经常会下载到EXE格式的电子书,在电脑上运行是没问题,但是如果想要在手机/MP3或MP4里阅读,就没得法子了。今天,小编就跟大家分享一款可以将EXE电子书转为TXT格式的软件miniKillEBook。   ...

    新浪微博备份工具

    新浪微博备份软件可以备份新浪微博,自动制作漂亮的微博电子书 可用于保存有意义的新浪微博了。

    有图电子书制作软件 v4.0.zip

    用户可以将设计作品一键分享到新浪微博、腾讯微博、人人网……创意在分享中互动,在互动中升华。   一张照片只能代表生活的点滴,而一本画册能串成没有断点的记忆……有图,伴您成长:无论孩子的出生和成长、婚礼...

    实战Nginx-PDF版.zip

    第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;第4章Nginx与PHP;第5章Nginx与JSP、ASP.NET..第6章Nginx http负载均衡和反向代理;第7章Nginx 的rewrite规则与实例;第8章 Nginx 模块开发;第9章Nginx 的...

    博客备份工具BlogDown下载 5.23.20130916

    【2】电子书chm格式(含图片)(chm):电子书格式,保持博客原样,文件中含图片,无需连网,所有博客一个文件,方便阅读和珍藏。 【3】电子书chm格式(含图片,按文章类别分组)【强烈推荐】(chm):文件中含图片,...

    366天生日密码.exe

    366天生日密码电子书 tom 新浪网上的生日书内容,下载方便阅读

    CAJViewer全文浏览器7.02绿色精简版_【可阅读CAJ.NH.KDH.PDF格式的电子书】

    为了测试文字识别效果,特选取新浪2007-7-23日新闻,考屏成图片后打印成pdf(演示.pdf),进行文字识别!识别效果见演示.jpg (测试系统为win2K和winXP)。 CAJViewer——CAJ全文浏览器是中国期刊网的专用全文格式阅读...

    微盘应用级新浪架构分享

    微盘应用级新浪架构分享

    豆约翰博客备份专家20150130

    豆约翰博客备份专家是用法简单,功能强大的博客备份工具,博客电子书(PDF,CHM,WORD和TXT)生成工具,博文离线浏览工具,软件界面美观大方,支持多个主流博客网站(新浪微博,腾讯说说,QQ空间,新浪博客,宝宝树...

    博客备份工具

    【2】电子书chm格式(含图片)(chm):电子书格式,保持博客原样,文件中含图片,无需连网,所有博客一个文件,方便阅读和珍藏。 【3】电子书chm格式(含图片,按文章类别分组)【强烈推荐】(chm):文件中含图片,...

    手机工作室

    铃声: 铃声下载(新浪/搜狐/网易),保存铃声到手机铃声目录。 通讯录/电话簿: 管理/备份/同步通讯录、电话簿(不需要Outlook)。 日程: 管理/备份/同步日程。 电子书: 制作、阅读,上传电子书到手机。 浏览器:...

    Redis入门指南2 高清

    Redis 凭借其全面的功能得到越来越多的公司的青睐,从初创企业到新浪微博这样拥有 着几百台Redis服务器的大公司,都能看到Redis的身影。Redis也是一个名副其实的多面手,无 论是存储、队列还是缓存系统,都有它的...

    新浪小微博

    在IPhone客户端程序执行后会进入后台,当用户在阅读电子书时,发现好的语句想发送到sina微博时,只需选中复制该语句,然后再呼叫出本程序,该语句就会出现在本程序提供的文本框里,用户可以继续编辑或直接点击发布就可以...

Global site tag (gtag.js) - Google Analytics