前言

在贴吧看了个小说追了几天被删帖了,于是自己找书名,打算下载下来看,结果要么是需要充值,要么不提供下载。作为一个猿类,怎么能忍。

好在小说网站多入牛毛,有的采用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才是正确的打开方式的更多相关文章

  1. 多个.txt文件合并到一个.txt文件中

    如果想要将多个.txt文件合并到一个.txt文件中,可以先将所有.txt文件放到一个文件夹中,然后使用.bat文件完成任务. 例如,在一个文件夹下有1.txt, 2.txt, 3.txt三个文件,想把 ...

  2. 程序猿看了要xiao了

    一. 程序猿问科比:“你为什么这么成功? ”科比:“你知道洛杉矶凌晨四点是什么样子吗? ”程序猿:“知道,一般那个时候我还在写代码,怎么了?”科比:“额…….” 二. 女神:你能让这个论坛的人都吵起来 ...

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

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  4. Java程序猿学习的建议(转)

    第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...

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

    回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议   引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的 ...

  6. 顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  7. 每一个程序猿都应该用MBP

    换笔记本的想法非常久了.前段时间换工作就想看换工作之后是什么情况吧. 可能工作配的笔记本就是MBP.后来发现是想多了,新工作的笔记本是Thinkpad X240. 配置全然够用了,8G内存+128G的 ...

  8. 黑马程序猿_Java 代理机制学习总结

    -------<a href="http://www.itheima.com/"">android培训</a>.<a href=" ...

  9. 如何向非技术人(程序猿)解释SQL注入?

    前两天看博客园新闻,有一篇文章名为<我该如何向非技术人解释SQL注入?>(http://kb.cnblogs.com/page/515151/).是一个外国人写的,伯乐在线翻译的.我当时看 ...

随机推荐

  1. Sql Server之旅——第六站 使用winHex利器加深理解数据页

    这篇我来介绍一个winhex利器,这个工具网上有介绍,用途大着呢,可以用来玩数据修复,恢复删除文件等等....它能够将一个file解析成 hex形式,这样你就可以对hex进行修改,然后你就可以看到修复 ...

  2. React Native初试:Windows下Andriod环境搭建

    最近想写个App,又觉得Native App 太无趣了Web App又没那么成熟然后发现了Facebook在9月发布的React Native比较新奇,所以决定捣鼓看看: React Native为F ...

  3. php高级研发或架构师必了解---很多问题面试中常问到!

    一.mysql相关知识    1. mysql优化方式            MYSQL 优化常用方法            mysql 性能优化方案      2.如何分库分表            ...

  4. MySQL Database on Azure 参数设置

    在使用MySQL过程中,经常会根据需要对MySQL的参数进行一些设置和调整.作为PaaS版本的MySQL,MySQL Database on Azure在参数设置方面有一些限制,客户不能像使用on-p ...

  5. IDEA使用(1)intellIJ idea 配置 svn

    以前开发工具一直用的是Eclipse/MyEclipse,虽然早就听说过Idea而且也尝试用过几次, 说实话一开始使用idea真是很不习惯,不只是快捷键不同:比如项目和模块.服务器(如Tomcat)配 ...

  6. 中午游泳很海皮-linux&php

    hi 中午又去游泳了,其实本来打算是昨天去的,谁知天公不作美,周一都下雨.今天其实也一样的,有点小雨,不过游得到泳,比什么都好 1.PHP&MySQL -----PHP内置MySQL函数学习( ...

  7. 《2016ThoughtWorks技术雷达峰会----微服务架构》

    微服务架构   王键,ThoughtWorks, 首席咨询师 首先微服务架构的定义,thoughtWorks在2012年3月的技术雷达中这样定义: “微服务架构是一种架构,它提倡将单一应用程序划分为一 ...

  8. R语言学习笔记(一)

    1.不同的行业对数据集(即表格)的行和列称谓不同,统计学家称其为观测(observation)和变量(variable): 2.R语言存储数据的结构: ①向量:类似于C语言里的一位数组,执行组合功能的 ...

  9. (一)观察者模式-C++实现

    观察者模式: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并被自动更新. 它有四种角色: 主题(Subject):一个接口,规定了具体主题需要实现的方法. ...

  10. JAVA IO 以及 NIO 理解

    由于Netty,了解了一些异步IO的知识,JAVA里面NIO就是原来的IO的一个补充,本文主要记录下在JAVA中IO的底层实现原理,以及对Zerocopy技术介绍. IO,其实意味着:数据不停地搬入搬 ...