程序猿看小说还要去找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();
        }
时间: 2024-10-17 04:39:41

程序猿看小说还要去找TXT?自己动手爬一个TXT才是正确的打开方式的相关文章

将多个txt文件写入到一个txt文件中

今天在工作中遇到一个比较繁琐的问题,就是我们下载了几十个密钥,分在不同的txt文件中,但是我们在导入密钥的过程中是需要放在同一个txt文件中进行批量导入的,所以笨的方法就是手动 CTRL+C.CTRL+V,这样几十个文件下来,不仅效率很低,并且容易出错.为此,想到了利用java文件类来进行操作. 虽然大学里学的是软件工程专业,但是从来没有认真学习过,找的工作也不是开发,所以好多基础知识都不明白,为此只好找javaAPI来看. 下面是实现将多个txt文件的内容复制到一个txt文件中去的代码: pa

程序猿放松娱乐必去的6个网站推荐

1)看风景  程序员每天在液晶屏幕下工作很长时间,应该让干涩的眼睛得到好好的放松,偶尔看看窗外的绿树或远处的风景可能是不错的方式,但是这在北京上海广州这样的大城市里不太现实,所以这里推荐一个纯粹的分享旅行照片的网站「画旅途」,上面都是网友们上传的高质量旅行照片:看着世界各地的迷人风景,欣赏着动人的旅途故事,听着悦耳的背景音乐,是非常不错的放松方式.  http://www.hualvtu.com 2)看美女  专门为男程序员/ 送上的福利,据说男人每天看美女十分钟可延长寿命,因此这里推荐一个以美

程序猿怎样哄女朋友开心的秘籍,定制给女朋友一个应用(生日礼物)

这算是我写的安卓比較完整的一个应用了吧,只是事实上也还不怎么完整,还有好多功能没有加进去,可是因为昨天是女朋友的生日,所以就送给他了,这也是我学习安卓半个月来的第一个应用了"音乐播放器"! 制作,从构思到完毕一共用了两天时间,当中也还有非常多不完美,UI也特别丑,布局杂乱无章,可是无论怎么样,最后还是搞出来了!当中应用的主要技术有:service,多线程,歌词文件解析,fragment等. 昨天送给了女朋友,她好happy,毕竟还是比較有意义的,虽难难度系数非常低,也没有什么价值,可是

Python将多个txt文件合并到一个txt

import os for filename in os.listdir("班级名"): print(filename) with open("班级名/"+filename,encoding='utf-8') as f: for line in f.readlines(): with open("班级名/总表.txt","a") as fp: fp.write(line) 原文地址:https://www.cnblogs.co

亲爱的程序猿们怎么找工作

神秘的刀郎在 2003 年成名,成名歌曲是<2002年的第一场雪>. "2002年的第一场雪,来得比往年要晚一些.停靠在八楼的二路汽车,带走了最后一片飘落黄叶.--" 正是在 2002 年,我大学毕业,找了份售后技术支持的工作. 2003 年的时候,奔波在河北维护程控交换设备,我们破旧的桑塔纳里,经常传来刀郎沙哑的嗓音. 好吧,我承认,这篇文章与刀郎没有半毛钱关系.可是当年红遍大江南北的刀郎,现在已经找不着了吧. 请给我的决赛文章<Qt Quick 图像处理实例之美图

Java程序猿学习当中各个阶段的建议

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的. 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了. 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个

程序猿生存定律--成长路上常见的坑(2)

程序猿生存定律这系列的文件夹在这里:程序猿生存定律--文件夹 喜欢从头瞄的,能够移步. ------------------------------------------------------------------------------- 1. "博"与"专"上的迷失 假设说一个人的学习已经聚焦,而且学习的内容和自己实际參与的项目也相吻合,那么是不是就没有问题了?非常不幸,答案仍然是否定的,在不论什么一个子领域里,仍然须要进一步去考虑"博"

优秀程序猿因何而优秀?

这些年我曾和非常多程序猿一起工作,他们之中的一些人非常厉害,而还有一些人显得平凡. 不久前由于和一些技术非常熟练的程序猿工作感觉非常愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序猿那么优秀,糟糕的程序猿那么糟糕?简而言之,什么原因成就了一位优秀的程序猿呢? 依据我的经验,成为一个优秀程序猿同年龄.教育程度,还有和你赚多少钱没有不论什么关系. 关键在于你的做法,更深入地说,就是你的想法.我注意到我所钦佩的程序猿都有一些相似习惯.不是他们所选语言的知识.也不是对数据结构和算法的深入

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议

其实本来真的没打算写这篇文章,主要是我得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.我自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的. 但是,最近问我的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了. 其实之前我写过一篇文章,但是那篇文章更多的是在讨论"面试前该不该刷题"这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上,而