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

电子书下载(新浪、QQ)

阅读更多
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电子书下载资源网站汇总【精华第二季】..pdf

    "Kindle电子书下载资源网站汇总【精华第二季】" 本资源汇总了多个电子书下载资源网站,主要面向Kindle用户,旨在提供方便的电子书下载体验。以下是资源汇总的详细介绍: 首先,推荐一个Kindle电子书搜索引擎...

    微印- 出微博外 每个人的QQ空间也是一本书.docx

    电子书下载的费用为每册5.1元,纸质书的价格则根据页数不同而变化,从最低的38元(20页以内含邮费)到最高的658元(900页以上含邮费)不等。新推出的QQ空间照片书制作工艺更加精致,价格也因此有所提高,例如,10页...

    博客备份工具BlogDown下载 5.23.20130916

    支持国内各个大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等,本软件支持的详细博客列表见附录,会不断添加新的博客。 (+)支持多种微博 支持多种微博,包括新浪微博,搜狐微博,腾讯...

    geotools中文资料,我学习时候,整理的资料

    geotools中文资料,我学习时候,整理的资料, 另外我的新浪博客,有关于...欢迎下载,大家一起学习,我建了个gis群 291301205 新浪 http://blog.sina.com.cn/skywalkershaka 因为我下资源 要分 所以设置了1分 希望谅解

    电子商务成功必修课—蒋晖

    《电子商务成功必修课—蒋晖》是一本由网络营销专家蒋晖撰写的电子书,旨在为初涉电子商务领域的创业者提供实战指南。蒋晖,作为南京利为汇信息技术有限公司的创始人,凭借自身丰富的经验和深刻的洞察力,系统性地...

    豆约翰博客备份专家20150130

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

    实战Nginx-PDF版.zip

    主要内容包括:第1章 Nginx简介;第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;...第5章Nginx与JSP、ASP.NET.....第7章Nginx 的rewrite规则与实例;...第9章Nginx 的web缓存服务与新浪网的开源NCACHE模块等

    博客备份工具

    支持国内各个大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等。目前总共支持50个博客,详细目录附后。 微博备份 支持四大微博:新浪微博,搜狐微博,腾讯微博,网易微博。 支持多种读书...

    博客备份工具BlogDown

    支持国内所有大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等。目前总共支持49个博客,详细目录附后。 **丰富的导出格式 可以把下载的博客文章导出为流行的文档格式,包括经典的电子书chm...

    网站推广方法大全样本.docx

    11. **电子书下载推广**:将网站内容整理成电子书,提供下载,其中嵌入网站信息。 12. **博客推广**:针对热门关键词撰写文章,发布到各大博客平台,同时附带网站链接。 13. **网摘推广**:在poco网摘、天极网摘、...

    博客备份工具BlogDown v5.30.20131218.zip

    支持国内各个大型的博客网站,例如新浪博客,网易博客,百度空间,QQ空间,搜狐博客等等,本软件支持的详细博客列表见附录,会不断添加新的博客。   支持四大微博 支持四大微博:新浪微博,搜狐微博,腾讯微博,...

    免费网络资源网址大全(个人收集)

    此外,常用的聊天工具如腾讯QQ、新浪UC、YY语音、53KF和旺客,满足了不同场景下的即时通讯需求。 在网络安全方面,360安全卫士、金山毒霸、ESET NOD32和AVAST等免费杀毒软件为用户的电脑提供了防护屏障。软件下载...

    豆约翰博客备份专家V2.4

    豆约翰博客备份专家是完全免费,功能强大的博客备份工具,博客电子书(PDF,CHM和TXT)生成工具,博文离线浏览工具,软件界面美观大方,支持多个主流博客网站(QQ空间,百度空间,新浪博客,网易博客,豆瓣日记,...

    网站推广方法大全.pdf

    11. **下载推广**:制作包含网站信息的电子书供人下载,提升网站知名度。 12. **博客推广**:根据热门关键词创作内容,同时提及网站,发布到各大博客平台。 13. **网摘推广**:在知名网摘网站推荐自己的网页,如...

    网站推广方法.docx

    1. **网摘**:将优质内容提交到网摘站,如365key、新浪vivi,获得推荐可带来流量。 2. **书签收藏**:鼓励用户将企业网站添加到百度搜藏、QQ书签等,提高网站的回访率。 3. **顶客网站**:在digg类网站提交内容,...

    好用的智能网络资源系统

    亦可监控指定网站并在数据改变的时候够自动通过多种方式(MSN/ICQ/QQ/Jabber/电子邮件/手机短信/飞信/网络接口请求/信使服务/Web服务/各种数据库/文件/系统日志/系统声音/注册表/博客/Twitter/饭否/嘀咕/火兔/同学/做...

    电子商务-网络推广的100钟方法.doc

    - **网摘和书签**:在网摘网站和社交书签平台分享网站内容,如365key、新浪vivi、百度收藏、QQ书签等。 9. **广告投放**: - **软文广告**:在相关网站发布含有企业信息的文章。 - **竞价广告**:参与百度、谷歌...

    豆约翰博客备份专家V2.6

    豆约翰博客备份专家[1]是完全免费,功能强大的博客备份工具,博客电子书(PDF,CHM和TXT)生成工具,博文离线浏览工具,软件界面美观大方,支持多个主流博客网站(QQ空间,百度空间,新浪博客,网易博客,豆瓣日记,...

    互联网三大类型.pptx

    1. **云计算特点**:云计算提供按需使用、可扩展的服务,具有公共事业性质,例如社区QQ群功能,可将网站内容推送至指定QQ群,增强用户互动。 2. **优势**:与传统IT相比,云计算具有快速扩容、低门槛、低成本的优势...

Global site tag (gtag.js) - Google Analytics