使用TinySpider实战抓取自己博客中的内容
因为做官网,没有内容,因此就想办法从OSChina中写的博客里弄点内容,这就要用到爬虫了。
然后就花了几分钟搞了一下,步骤如下:
第一步,写个方法抓目录:
- public static void processCategory(String categoryId) {
- Watcher watcher = new WatcherImpl();
- Spider spider = new SpiderImpl();
- watcher.addProcessor(new OsChinaCategoryProcessor());
- QuickNameFilter<HtmlNode> nodeFilter = new QuickNameFilter<HtmlNode>();
- nodeFilter.setNodeName("li");
- nodeFilter.setIncludeAttribute("class", "Blog");
- watcher.setNodeFilter(nodeFilter);
- spider.addWatcher(watcher);
- spider.processUrl("http://my.oschina.net/tinyframework/blog?catalog="+categoryId);
- }
第二步,写个方法抓文章:
- public static void processTopic(String pageId) {
- Watcher watcher = new WatcherImpl();
- Spider spider = new SpiderImpl();
- watcher.addProcessor(new OsChinaTopicProcessor());
- QuickNameFilter<HtmlNode> nodeFilter = new QuickNameFilter<HtmlNode>();
- nodeFilter.setNodeName("div");
- nodeFilter.setIncludeAttribute("class", "BlogContent");
- watcher.setNodeFilter(nodeFilter);
- spider.addWatcher(watcher);
- spider.processUrl("http://my.oschina.net/tinyframework/blog/"+pageId);
- }
第三步,写一下目录处理器
- public class OsChinaCategoryProcessor implements Processor {
- public void process(String url, HtmlNode node) {
- HtmlNode a = node.getSubNodeRecursively("h2").getSubNode("a");
- String href = a.getAttribute("href");
- String topicId = href.substring(href.lastIndexOf('/') + 1);
- System.out.printf("<a href=\"%s.page\">%s</a>\n", topicId, a.getPureText());
- try {
- Thread.sleep(200);//这里怕oschina拒绝访问,休息一下
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- OSchinaSpider.processTopic(topicId);
- }
- }
第四步,写一下文章处理器:
- public class OsChinaTopicProcessor implements Processor {
- String outoutPath="E:\\oschina\\";
- public void process(String url, HtmlNode node) {
- String fileName=outoutPath+url.substring(url.lastIndexOf('/')+1)+".page";
- try {
- IOUtils.writeToOutputStream(new FileOutputStream(fileName),node.toString(),"UTF-8");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
第五步,写一下main方法:
- public static void main(String[] args) {
- processCategory("377413");
- }
第六步,看结果:
- <a href="214018.page">300粉丝集结号吹响了,可以开源重量级的流程引擎或UI引擎 </a>
- <a href="268983.page">Tiny实例:TINY框架官网制作过程详解 </a>
- <a href="267764.page">从应用示例来认识Tiny框架 </a>
- <a href="266707.page">TinyRMI---RMI的封装、扩展及踩到的坑的解决 </a>
- <a href="233111.page">悠然乱弹:五一部署了sonar有hudson,发布了1.1.0正式版到Maven中央仓库 </a>
- <a href="228712.page">悠然乱弹:我的架构观 </a>
- <a href="226850.page">TinyDBF-用200行的DBF解析器来展示良好架构设计 </a>
- <a href="225959.page">新增TinyMessage,并实现邮件接收处理 </a>
- <a href="223310.page">如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI框架 </a>
- <a href="221930.page">Velocity宏定义的坑与解决办法 </a>
- <a href="220619.page">不一样的味道--Html及Xml解析、格式化、遍历 </a>
- <a href="214309.page">TinyINI开源了~~ </a>
- <a href="213622.page">Tiny分布式计算框架开源了 </a>
- <a href="212682.page">悠然乱弹:切身体会来说明人性化设计的重要性 </a>
- <a href="212639.page">Tiny Formater </a>
- <a href="206718.page">TINY框架FAQ汇集 </a>
- <a href="205733.page">Tiny框架启动过程日志 </a>
- <a href="205279.page">Tiny之Web工程构建 </a>
- <a href="204994.page">开源框架Tiny之内容组成 </a>
- <a href="203075.page">Tiny后续版本需求整理 </a>
- <a href="202825.page">TinyUI组件开发示例 </a>
- <a href="201307.page">TinyDbRouter开源喽~~~ </a>
- <a href="201071.page">Tiny中文分词 </a>
- <a href="200604.page">在Linux下搭建Tiny开发环境 </a>
- <a href="200408.page">一个Maven工程中,不同的模块需要不同的JDK进行编译的解决方案 </a>
- <a href="199515.page">业务流程引擎 </a>
- <a href="196486.page">Tiny并行计算框架之复杂示例 </a>
- <a href="196373.page">Tiny并行计算框架之实现机理 </a>
- <a href="196070.page">Tiny并行计算框架之使用介绍 </a>
- <a href="194610.page">TinySpider开源喽~~~ </a>
- <a href="194578.page">TinyHtmlParser开源喽~~~ </a>
- <a href="194574.page">TinyXmlParser开源喽~~~ </a>
- <a href="194551.page">TinyDBRouter </a>
- <a href="194413.page">开源前要做好哪些准备工作? </a>
- <a href="192778.page">分布式锁的简单实现 </a>
- <a href="189259.page">TinyIOC </a>
- <a href="188780.page">TinyDBCluster Vs routing4db </a>
- <a href="186637.page">文档生成框架 </a>
- <a href="186583.page">数据库分区分片框架 </a>
- <a href="185134.page">分区分表支持 </a>
- <a href="178153.page">Resetting the root password for MySQL </a>
- <a href="177224.page">Tiny框架之内容组成 </a>
- <a href="176153.page">JSP放入Jar包支持 </a>
- <a href="172180.page">流程式编程 </a>
- <a href="170799.page">强悍的上下文Context </a>
- <a href="170763.page">类Spring IoC容器 </a>
- <a href="170741.page">虚拟文件系统VFS </a>
- <a href="170401.page">BigPipe为什么可以节省时间? </a>
- <a href="170326.page">XmlParser和HtmlParser </a>
- <a href="170154.page">线程组 </a>
- <a href="170117.page">流程自动化布局 </a>
- <a href="169813.page">涉密数据的处理 </a>
- <a href="169553.page">Word文档生成 </a>
- <a href="169509.page">如何快速开发网站? </a>
- <a href="169399.page">如何让Web.xml变得简洁? </a>
- <a href="169339.page">Hello,World 百态 </a>
- <a href="169278.page">关于中文处理方面的研究 </a>
- <a href="169260.page">构建网络爬虫?so easy </a>
- <a href="169206.page">UI开发的终极解决方案 </a>
- <a href="168896.page">基于业务单元的开发与部署模式 </a>
- <a href="168477.page">一种基于主客体模型的权限管理框架 </a>
- <a href="167430.page">MDA数据校验规则定义 </a>
- <a href="166930.page">Tiny之7*24集群服务方案 </a>
- <a href="166893.page">Tiny设计原则 </a>
- <a href="166846.page">构建Tiny生态圈 </a>
- <a href="166845.page">Tiny框架设计理念 </a>
- <a href="166843.page">基于实体模型开发主题管理简析 </a>
- <a href="166842.page">MDA模型定义及扩展 </a>
- <a href="165566.page">JS、CSS合并带来的效率提升 </a>
- <a href="165402.page">主题切换及其管理 </a>
生成的目录列表:
E:\oschina 的目录
- [.] [..] 165402.page 165566.page 166842.page
- 166843.page 166845.page 166846.page 166893.page 166930.page
- 167430.page 168477.page 168896.page 169206.page 169260.page
- 169278.page 169339.page 169399.page 169509.page 169553.page
- 169813.page 170117.page 170154.page 170326.page 170401.page
- 170741.page 170763.page 170799.page 172180.page 176153.page
- 177224.page 178153.page 185134.page 186583.page 186637.page
- 188780.page 189259.page 192778.page 194413.page 194551.page
- 194574.page 194578.page 194610.page 196070.page 196373.page
- 196486.page 199515.page 200408.page 200604.page 201071.page
- 201307.page 202825.page 204994.page 205279.page 205733.page
- 206718.page 212639.page 212682.page 213622.page 214018.page
- 214309.page 220619.page 221930.page 223310.page 225959.page
- 226850.page 228712.page 233111.page 266707.page 267764.page
- 268983.page
第7步,把文件放入tinysite中去。
爽,收工