程序猿看小说还要去找TXT?自己动手爬一个TXT才是正确的打开方式
前言
在贴吧看了个小说追了几天被删帖了,于是自己找书名,打算下载下来看,结果要么是需要充值,要么不提供下载。作为一个猿类,怎么能忍。
好在小说网站多入牛毛,有的采用js加载文字来防采集,有的用css图片替换个别文字来防采集,但这都不是我们今天要攻克的对象,我们只想找一个软柿子来捏捏不想花太多时间和精力,于是就找到了下面的网站,网址我就不放了(我不会告诉你们源码里有的)。
本意是不想花太多时间和精力的,没想到写个博客分享下比写个代码花的时间还多。。。。写代码才花了15分钟,写博客花了我1个小时。
完成效果
Jumony简单介绍和基本使用方法
Jumony简单介绍
Jumony是一个开源项目,主要作用是提供程序员完整的HTML掌控能力,可以用CSS3选择器进行元素的拾取。除了可以做HTML解释器以外,还可以直接进行数据抓取。
基本用法
此处只举一个例子,通过加载网页,然后像JQuery的操作方式一样找到元素,并输出
foreach( var title = new JumonyParser().LoadDocument( "http://www.cnblogs.com/" ).Find( ".post_item a.titlelnk" ) )
Console.WriteLine( title.InnerText() );
Jumony的安装
vs菜单的工具-》Nuget程序包管理器-》管理解决方案的Nuget包
简短的实战
为何叫简短的实战,因为整个过程真的非常简短就完成了。
正文内容获取
首先打开小说的正文部分,用F12查看元素,发现小说的正文是完整的文本,并且是放在id="content"的一个div里的
所以只要用 #content就能找到我们要的元素,并且输出正文,并没有什么难点
标题获取
找到标题,然后呢,这里用一个黑科技直接拿到css选择器
通过F12提供的Copy CSS path,可以无脑的直接获取到css选择器
于是title部分的代码
下一页地址获取
和前面一样,找到下一页的css选择器,这次获取的不是innerText了,这次获取的是href的value,然后Copy css Path。
结果就是如下
思路就是继续循环,一直跟着nextUrl往下抓取就是咯
完整源码
- static void Main(string[] args)
- {
- FileStream fs = null;
- if (File.Exists("D\\c.txt"))
- {
- fs = new FileStream("D:\\c.txt", FileMode.Append);
- }
- else
- {
- fs = new FileStream("D:\\c.txt", FileMode.Create);
- }
- StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
- string baseUrl = "http://www.42xs.com/read/0/404/";
- var nextUrl = "171271.html";
- string url = "";
- string txt = "";
- string title = "";
- while (nextUrl != "")
- {
- try
- {
- url = baseUrl + nextUrl;
- var doc = new Ivony.Html.Parser.JumonyParser().LoadDocument(url);
- var titleDom = doc.FindFirst("#center > div.title > h1");
- title = titleDom.InnerText();
- var dom = doc.FindFirst("#content");
- txt = dom.InnerText();
- var domNext = doc.FindFirst("#container > div:nth-child(3) > div > div.jump > a:nth-child(6)");
- nextUrl = domNext.Attribute("href").Value();
- }
- catch
- {
- Console.WriteLine(string.Format("{0}没有成功", url));
- nextUrl = "";
- }
- Console.WriteLine(title);
- sw.WriteLine("");
- sw.WriteLine(title);
- sw.WriteLine("");
- sw.WriteLine(txt);
- }
- Console.Write("The End. Press any key to exit...");
- Console.ReadKey();
- sw.Close();
- fs.Close();
- }
程序猿看小说还要去找TXT?自己动手爬一个TXT才是正确的打开方式的更多相关文章
- 多个.txt文件合并到一个.txt文件中
如果想要将多个.txt文件合并到一个.txt文件中,可以先将所有.txt文件放到一个文件夹中,然后使用.bat文件完成任务. 例如,在一个文件夹下有1.txt, 2.txt, 3.txt三个文件,想把 ...
- 程序猿看了要xiao了
一. 程序猿问科比:“你为什么这么成功? ”科比:“你知道洛杉矶凌晨四点是什么样子吗? ”程序猿:“知道,一般那个时候我还在写代码,怎么了?”科比:“额…….” 二. 女神:你能让这个论坛的人都吵起来 ...
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- Java程序猿学习的建议(转)
第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...
- Java程序猿学习当中各个阶段的建议
回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的 ...
- 顺便谈谈对于Java程序猿学习当中各个阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- 每一个程序猿都应该用MBP
换笔记本的想法非常久了.前段时间换工作就想看换工作之后是什么情况吧. 可能工作配的笔记本就是MBP.后来发现是想多了,新工作的笔记本是Thinkpad X240. 配置全然够用了,8G内存+128G的 ...
- 黑马程序猿_Java 代理机制学习总结
-------<a href="http://www.itheima.com/"">android培训</a>.<a href=" ...
- 如何向非技术人(程序猿)解释SQL注入?
前两天看博客园新闻,有一篇文章名为<我该如何向非技术人解释SQL注入?>(http://kb.cnblogs.com/page/515151/).是一个外国人写的,伯乐在线翻译的.我当时看 ...
随机推荐
- 这些web前端特效你造吗?
友情提示:所有特效效果均是GIF图片演示(均有源码下载),所以这个博文可能加载的比较慢,请谅解. 凛冬将至(Winter Is Coming),在上一篇博客凛冬将至,用几款特效暖暖身得到了比较好的响应 ...
- mydumper 安装报错处理
mydumper 官网:https://launchpad.net/mydumper 下载之后,安装报错: [root@localhost local]# cd mydumper-0.6.2 [roo ...
- 【转】input输入框中光标高度的变化问题
原文地址:http://blog.csdn.net/luochao_tj/article/details/17755457 input[type='text']文本框光标高度在有输入内容和为空时发生很 ...
- Android : <com.mobeta.android.dslv.DragSortListView-引用自定义控件包名错误
所谓的包名与命名空间的问题,包名不一致是指与自己工程的package名称不一置, 开始以为是到自定义包名不一置,真是个误区: 解决方法: 把xmlns:dslv="http://schema ...
- subversion-1.8.5 windows install dist
python build\win32\make_dist.py subversion-1.8.5 d:/rapm
- web报表工具FineReport常用函数的用法总结(报表函数)
说明:本次总结中,凡是以tableName或viewName作为参数因子的.函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序. CLASS CLASS(object):返回o ...
- PaintView 绘图控件解析
博客地址:博客园,版权所有,转载须联系作者. GitHub地址:JustWeTools 最近做了个绘图的控件,实现了一些有趣的功能. 先上效果图: PaintView画图工具: 1.可直接使用设定按钮 ...
- Red5 第一个例子之HelloWorld
http://yerik.blog.51cto.com/1662422/1343993
- Java面向对象编程之异常处理机制
一:Java的异常处理机制的优点: 1:把各种不同情况的异常情况分类,使用JAVA类来表示异常情况,这种类被称为异常类.把各种异常情况表示成异常类,可以充分的发挥类的可扩展性和可重用性. 2:异常流程 ...
- luogu1328[NOIP2014 T1]生活大爆炸版石头剪刀布
题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...