前言

  前几天写了个爬虫,然后认识到了自己的不足。 烽火情怀推荐了Jumony.Core,通过倚天照海- -推荐的文章,也发现了Jumony.Core。

  研究了2天,我发现这个东西简单粗暴,非常好用,因为语法比较像jQuery。上手快,也很好理解。

添加DLL

  IDE是Visual Studio 2013,我是在NugGet中搜索,并添加到项目中。

  

Jumony的用法

1、从网站获取html代码,将html字符串分析为标准的文档对象模型(DOM)。

IHtmlDocument source = new JumonyParser().LoadDocument("http://www.23us.so/files/article/html/13/13655/index.html", System.Text.Encoding.GetEncoding("utf-8"));

Jumony的API可以从互联网上直接抓取文档分析,并根据HTTP头自动识别编码,但是上面的网站怎么也无法获取到html,其他网站就没问题(例如博客园、起点),后来我把源码下载下来,一步步测试,发现html是获取到的,但是乱码,导致了Jumony类库分析html文本的时候,分析的不正确。解决办法就是设置utf-8。

2、获取所有的meta标签

var aLinks = source.Find("meta");//获取所有的meta标签
foreach (var aLink in aLinks)
{
if (aLink.Attribute("name").Value() == "keywords")
{
name = aLink.Attribute("content").Value();//无疆,无疆最新章节,无疆全文阅读
}
}

3、获取 name=keywords 的meta标签,并得到content属性里的值

string name = source.Find("meta[name=keywords]").FirstOrDefault().Attribute("content").Value();

4、获取所有Class=L

var lLinks = source.Find(".L");//获取所有class=L的td标签
foreach (var lLink in lLinks)//循环class=L的td
{
  //lLink值 例如:<td class="L"><a href="http://www.23us.so/files/article/html/13/13655/5638724.html">楔子</a></td>
} var aLinks = source.Find(".L a");//获取所有class=L下的a标签
foreach (var aLink in aLinks)
{   
  //aLink值 <a href="http://www.23us.so/files/article/html/13/13655/5638724.html">楔子</a>
  string title = aLink.InnerText()//楔子
  string url = aLink.Attribute("href").Value();//http://www.23us.so/files/article/html/13/13655/5638724.html
}

5、根据ID获取

var chapterLink = source.Find("#at a");//查找id=at下的所有a标签
foreach (var i in chapterLink)//这里循环的就是a标签
{
  //aLink值 例如:<a href="http://www.23us.so/files/article/html/13/13655/5638724.html">楔子</a>
  string title = i.InnerText();//楔子
  string url = i.Attribute("href").Value();//http://www.23us.so/files/article/html/13/13655/5638724.html
}

C#完整代码

using Ivony.Html;
using Ivony.Html.Parser;using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Mvc; namespace Test.Controllers
{
public class CrawlerController : BaseController
{
// GET: Crawler
public void Index()
{
//需要给utf-8的编码,否则html是乱码。
IHtmlDocument source = new JumonyParser().LoadDocument("http://www.23us.so/files/article/html/13/13655/index.html", System.Text.Encoding.GetEncoding("utf-8")); //<meta name="keywords" content="无疆,无疆最新章节,无疆全文阅读"/>
string name = source.Find("meta[name=keywords]").FirstOrDefault().Attribute("content").Value().Split(',')[];//获取小说名字
var chapterLink = source.Find("#at a");//查找id=at下的所有a标签
foreach (var i in chapterLink)//这里循环的就是a标签
{
//章节标题
string title = i.InnerText(); //章节url
string url = i.Attribute("href").Value(); //根据章节的url,获取章节页面的html
IHtmlDocument sourceChild = new JumonyParser().LoadDocument(url, System.Text.Encoding.GetEncoding("utf-8")); //查找id=contents下的小说正文内容
string content = sourceChild.Find("#contents").FirstOrDefault().InnerHtml().Replace("&nbsp;", "").Replace("<br />", "\r\n"); //txt文本输出
string path = AppDomain.CurrentDomain.BaseDirectory.Replace("\\", "/") + "Txt/";
Novel(title + "\r\n" + content, name, path);
}
}
}
}

相关文章:C# 爬虫 抓取小说

Jumony源代码地址:https://github.com/Ivony/Jumony

C# 爬虫 Jumony html解析的更多相关文章

  1. 笔记-爬虫-js代码解析

    笔记-爬虫-js代码解析 1.      js代码解析 1.1.    前言 在爬取网站时经常会有js生成关键信息,而且js代码是混淆过的. 以瓜子二手车为例,直接请求https://www.guaz ...

  2. python爬虫---爬虫的数据解析的流程和解析数据的几种方式

    python爬虫---爬虫的数据解析的流程和解析数据的几种方式 一丶爬虫数据解析 概念:将一整张页面中的局部数据进行提取/解析 作用:用来实现聚焦爬虫的吧 实现方式: 正则 (针对字符串) bs4 x ...

  3. 开源磁力搜索爬虫dhtspider原理解析

    开源地址:https://github.com/callmelanmao/dhtspider. 开源的dht爬虫已经有很多了,有php版本的,python版本的和nodejs版本.经过一些测试,发现还 ...

  4. JAVA网络爬虫WebCollector深度解析——爬虫内核

    WebCollector爬虫官网:https://github.com/CrawlScript/WebCollector 技术讨论群:250108697 怎样将爬虫内核导入自己的项目? 1.进入爬虫官 ...

  5. Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据

    目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...

  6. 爬虫_拉勾网(解析ajax)

    拉勾网反爬虫做的比较严,请求头多添加几个参数才能不被网站识别 找到真正的请求网址,返回的是一个json串,解析这个json串即可,而且注意是post传值 通过改变data中pn的值来控制翻页 job_ ...

  7. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

  8. python爬虫之html解析Beautifulsoup和Xpath

    Beautiifulsoup Beautiful Soup 是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据.BeautifulSoup 用来解析 HTML 比较简 ...

  9. Java爬虫利器HTML解析工具-Jsoup

    Jsoup简介 Java爬虫解析HTML文档的工具有:htmlparser, Jsoup.本文将会详细介绍Jsoup的使用方法,10分钟搞定Java爬虫HTML解析. Jsoup可以直接解析某个URL ...

随机推荐

  1. Hibernate批量操作(二)

    Hibernate提供了一系列的查询接口,这些接口在实现上又有所不同.这里对Hibernate中的查询接口进行一个小结. 我们首先来看一下session加载实体对象的过程:Session在调用数据库查 ...

  2. Git时光机穿梭之版本回退

    现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...

  3. js判断空值

    { "mDataProp": 'CreationTime', 'mRender': function (date) { if (!date && typeof (d ...

  4. ABP+AdminLTE+Bootstrap Table权限管理系统一期

       学而时习之,不亦说乎,温顾温知新,可以为师矣. 这也是算是一种学习的方法和态度吧,经常去学习和总结,在博客园看了很多大神的文章,写下一点对于ABP(ABP是“ASP.NET Boilerplat ...

  5. java 使用https协议,cas认证PKIX path building failed错误解决方法

    如果遇到的是 上图的异常,请继续往下看. linux 下 添加 证书 (1) 获取网站安全证书 xx.cer ( 详情见随笔 获取网站安全证书 ) (2) 将上面导出的证书导入java中的cacert ...

  6. 浅谈odoo 后台与前端文件(附件)的存储与下载

    odoo 后台与前端文件(附件)存储与下载实现 笔记太多了很乱,想想还是写博客的好,慢慢更 当然了,前提是你已经配好了odoo开发环境 一.odoo后台界面实现附件的上传和下载 1).在应用中搜索下图 ...

  7. LinkStack

    //Node.h template<typename ElemType> struct Node { ElemType data; Node<ElemType> *next; ...

  8. zabbix 3.2.7 (源码包)安装部署

    Zabbix 3.2.7 + CentOS7 安装 环境准备: 操作系统 CentOS Linux release 7.2.1511 (Core) zabbix server 10.30.94.60 ...

  9. shell 脚本编程之特殊变量

    $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参数.$@ ...

  10. 删除oracle数据库[转]

    --===================== -- 手动删除oracle数据库 --===================== 在很多情况下,或无法使用dbca工具的时候,我们需要手动来删除数据库. ...