主要觉得往kindle里加书籍太麻烦了,要下载下来,还要通过邮件发送,特别一些网页文字版的书籍没办法放到kindle里,所以想着还不如自己动手丰衣足食,写一个程序直接抓取网页内容,制作成书籍,然后自动发送到kindle里。

程序首先操作简单“一键推送”,还有就是书籍要带目录。

先做了个winform版的,有时间再编写个Web版的。

程序相关的技术:

1.使用NSoup分析网页

2.爬虫规则设计

3.多线程爬网页

4.生成txt文本和pdf文件

5.使用邮件推送到自己的kindle设备

程序界面效果:

生成的TXT文件

生成的pdf文件

BookRule.xml配置文件

<BookSite Name="纵横小说网" Url="http://book.zongheng.com" charset="utf-8">
<title>.read_con h1</title>
<auther>.read_con a.fb</auther>
<cover></cover>
<introduction></introduction>
<catalog>.read_con .chapterBean a</catalog>
<content>#chapterContent</content>
</BookSite> <SearchSite Name="纵横网搜索" SearchUrl="http://search.zongheng.com/search/bookName/{0}/1.html" charset="utf-8" list=".search_text">
<title>h2</title>
<auther>.rela a</auther>
<cover></cover>
<introduction>.j_info</introduction>
<bookurl eq="1">.search_oprate p span a</bookurl>
</SearchSite>

多线程爬网页参考:http://www.cnblogs.com/kakake/p/4151691.html

生成pdf文件使用了itextsharp.dll组件

public void SavePdf(string filename)
{
FileInfo fileinfo = new FileInfo(filename);
if (fileinfo.Directory.Exists == false)
Directory.CreateDirectory(fileinfo.DirectoryName); Document doc = new Document(PageSize.A5, , , , );
PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));
doc.Open(); //指定字体库,并创建字体
BaseFont baseFont = BaseFont.CreateFont(
"C:\\WINDOWS\\FONTS\\SIMYOU.TTF",
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font font1 = new iTextSharp.text.Font(baseFont, );
iTextSharp.text.Font font2 = new iTextSharp.text.Font(baseFont, ); Chapter chapter1 = new Chapter(title, );
chapter1.Add(new Paragraph(title, font2));
chapter1.Add(new Paragraph(auther, font1));
chapter1.Add(new Paragraph(introduction, font1));
for (int i = ; i < catalogs.Count; i++)
{
Section section1 = chapter1.AddSection(catalogs[i].text);
section1.Add(new Paragraph(catalogs[i].page.text, font1));
section1.TriggerNewPage = true;
section1.BookmarkOpen = false;
} chapter1.BookmarkOpen = false;
doc.Add(chapter1);
doc.Close();
}

发送邮件使用的System.Net.Mail中微软封装好的MailMessage类,由于没有自己的邮件服务器,使用QQ邮箱推送到kindle非常不稳定,有时候可以有时候又发送失败。

 /// <summary>
/// 发送kindle的EMail
/// </summary>
/// <param name="toEmail">kindle的EMail地址</param>
/// <param name="type">发送的文件 0:pdf;1:txt</param>
/// <param name="filename">文件名</param>
public void SendMail(string toEmail, int type, string filename)
{
//确定smtp服务器地址。实例化一个Smtp客户端
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp.qq.com");
//生成一个发送地址
string strFrom = "****@qq.com"; //构造一个发件人地址对象
MailAddress from = new MailAddress(strFrom, "kakake", Encoding.UTF8);
//构造一个收件人地址对象
MailAddress to = new MailAddress(toEmail, "kindle", Encoding.UTF8); //构造一个Email的Message对象
MailMessage message = new MailMessage(from, to); if (type == )
SaveTxt(filename);
else if (type == )
SavePdf(filename); //得到文件名
string fileName = filename;
//判断文件是否存在
if (File.Exists(fileName))
{
//构造一个附件对象
Attachment attach = new Attachment(fileName);
//得到文件的信息
ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
//向邮件添加附件
message.Attachments.Add(attach);
}
else
{
throw new Exception("[" + fileName + "]文件没找到!");
} //添加邮件主题和内容
message.Subject = "书籍发送到kindle";
message.SubjectEncoding = Encoding.UTF8;
message.Body = "";
message.BodyEncoding = Encoding.UTF8; //设置邮件的信息
client.DeliveryMethod = SmtpDeliveryMethod.Network;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = false; //如果服务器支持安全连接,则将安全连接设为true。
//gmail支持,163不支持,如果是gmail则一定要将其设为true
client.EnableSsl = true; //设置用户名和密码。
//string userState = message.Subject;
client.UseDefaultCredentials = false;
string username = "user";
string passwd = "****";
//用户登陆信息
NetworkCredential myCredentials = new NetworkCredential(username, passwd);
client.Credentials = myCredentials;
//发送邮件
client.Send(message);
}
}

程序下载地址:http://pan.baidu.com/s/1dDndERB

最近买了个kindle,为了方便阅读,写了个程序抓取网页内容发送到Kindle的更多相关文章

  1. 抓取网页内容生成kindle电子书

    参考: http://calibre-ebook.com/download_linux http://blog.codinglabs.org/articles/convert-html-to-kind ...

  2. 20.multi_协程方法抓取总阅读量

    # 用asyncio和aiohttp抓取博客的总阅读量 (提示:先用接又找到每篇文章的链接) # https://www.jianshu.com/u/130f76596b02 import re im ...

  3. 自定义日志阅读器——包括了一个load取Tomcat日志的分析器

    最近在写往公司产品里添加Tomcat适配器,以支持Tomcat.有一些功能需要摘取到Tomcat的部分日志.没有合适的工具,也不想去网上找了,就自己写了一个. 简单的画了一下设计方案: 下面直接上代码 ...

  4. SpringBoot爬虫小说阅读网站,定时更新小说和抓取功能

    SpringBoot 小说爬虫搭建阅读网站 通过jsoup采集数据到mysql数据.redis作为缓存框架,减轻服务器压力.部署在linux,网站UI套纵横中文网! http://47.107.116 ...

  5. 成功抓取csdn阅读量过万博文

    http://images.cnblogs.com/cnblogs_com/elesos/1120632/o_111.png var commentscount = 1; 嵌套的评论算一条,这个可能有 ...

  6. 阅读笔记——Web应用程序

    Web应用程序与DD文件 Web应用程序 web应用程序是一种可以通过Web访问的应用程序.Web应用程序最大的好处是永和很容易访问应用程序.用户只需要有浏览器即可,不需要安装其他任何软件.一个Web ...

  7. 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程 分类: H3_NUTCH 2014-08-15 21:39 2530人阅读 评论(1) 收藏

    一.抓取流程概述 1.nutch抓取流程 当使用crawl命令进行抓取任务时,其基本流程步骤如下: (1)InjectorJob 开始第一个迭代 (2)GeneratorJob (3)FetcherJ ...

  8. WebApp 框架

    Razor 在WebApp 框架的运用   前面有两章介绍了WebApp框架<WebApp MVC,“不一样”的轻量级互联网应用程序开发框架>和<WebApp MVC 框架的开发细节 ...

  9. 你所不知道的 Kindle - 阅读微信公众号文章

    Kindle 是一款非常优秀的阅读设备,它为我们提供了非常舒服的阅读体验,并且配合强大的亚马逊图书资源,应该是目前最好的阅读设备之一.Kindle 在已有的成就下还一直在努力提升用户体验.为中国用户开 ...

随机推荐

  1. Minifying Angular应用时产生的问题

    一.产生的问题 如果你正在进行AngularJS的项目开发,生产时Minified JS文件有没有遇到下面问题: angular.module("myApp", []) .cont ...

  2. [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法

    前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...

  3. js时间函数

    时间 new Date() 获取时间,可以理解为是系统默认的函数. 从小括号里面获取系统时间日期,相当于在调用系统默认的函数. 年 getFullYear() 注意,有Full. 月 getMonth ...

  4. 从题目中学习java语法

    一.输入输出 1.输入圆的半径,计算并输出圆的周长和面积: import java.util.Scanner; public class zuoye01_circle { public static ...

  5. ESXi5 中克隆Linux虚拟主机的网络配置

    虚拟化技术果然非常方便,尤其是windows主机,克隆后在网络管理中改一下IP即可. 但对于Linux来说就有点麻烦,只修改IP还不行,还有MAC地址,网卡指定等,这个规程对应新手来说没有大半天搞不定 ...

  6. 25数据查询的各种小玩法-select上(必学)-天轰穿sqlserver视频教程

    大纲:简单查询-选择数据列,使用字符串,改变列标题,使用数据运算 优酷超清地址,为了冲优酷的访问量,所以这里只放优酷的地址了,其实其他网站还是都传了的哈.

  7. 单独卸载vs2010帮助文档HelpView之后的独立安装教程

    由于本人的HelpView经常出错,一气之下卸载之,随后发现修复无用,安装提示“必须要在vs2010安装过程中才能安装”这不是坑爹吗.. 感谢网友Jason提供的方法,更简单. 安装程序选择(或控制面 ...

  8. redis 学习指南

    一.介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.一个高性能的key-value数据库.并提供多种语言的API.说到Key-Value数据库NoSQL数 ...

  9. 【转】javascript运行机制之this详解

    this是面向对象语言中一个重要的关键字,理解并掌握该关键字的使用对于我们代码的健壮性及优美性至关重要.而javascript的this又有区别于Java.C#等纯面向对象的语言,这使得this更加扑 ...

  10. Asp.net MVC应用在IIS7上部署后403错误解决方案

    1.检查服务器上是否安装了“HTTP重定向”功能和“静态内容压缩”功能(在添加/删除程序或增加角色处安装) 2.应用程序池要被配置为“集成” 3.如果IIS在.Net Framework之后安装的,需 ...