C# 使用NCrawler爬虫全站采集

时间:17-02-13 栏目:C#开发 作者:kyle 评论:0 点击: 3,038 次

 

公司业务需要,需要采集一个表情站的所有内容,由于目标站下属二级分类太多。所以不想去直接按分类写规则。

 

虽然火车也可以实现但是得填充非常多的列表页进去,于是自己用C#来实现全站爬虫,再从中过滤不需要的文章规则。

 

在Nuget下载了NCrawler的库,这个C#的库比较老,已经相当长的时间没有再更新了。但是能用就成,不用非得去纠结最佳实现,

 

快速迭代的业务,优先以实现为主。下载回来发现引用了HtmlAgilityPack。但是是1.4.9版,和我另一个库有冲突,另一个库用的最新的1.4.9.5版。

 

于是下载源码重新编译。

 

最原始的库在

https://ncrawler.codeplex.com 然后github里面有人存了一份,从https://github.com/kant2002/NCrawler 下载,还发现一份官方的升级版在

https://github.com/esbencarlsen/NCrawler,被搞懵圈了,发现代码并不一致,于是下载了dant2002回来编译,

 

引用了新的HtmlAgilityPack之后成功编译,但是运行时会报错。找了大半天也没找到原因在哪里,我只需要引用新的HtmlAgilityPack,所以

 

把Nuget上可用的Dll导出来,用Refector对比源码,发现需要修改2处才可以使用。

 

打开NCrawlerModule.cs文件

改为下面这个,注释掉ThreadTaskRunnerService这行

//#if !DOTNET4 && !PORTABLE
//            builder.Register(c => new ThreadTaskRunnerService()).As<ITaskRunner>().InstancePerDependency();
//#else
            builder.Register(c => new NativeTaskRunnerService()).As<ITaskRunner>().InstancePerDependency();
//#endif

 

再找到Utils\MemoryStreamWithFileBackingStore.cs

        public override void Close()
        {
            if (m_MemoryStream != null)
            {
                m_Data = m_MemoryStream.ToArray();
                m_MemoryStream.Dispose();
                m_MemoryStream = null;
            }

            if (m_FileStoreStream != null)
            {
                m_FileStoreStream.Dispose();
                m_FileStoreStream = null;
            }

            //base.Close();
        }

把最后一个行的base.Clonse()注释掉,此行会触发异常。

 

然后以.net 4.5编译。成功出DLL。引用至项目,开始使用。

 

封装一个自己的类

1

 

使用时通过Xpath(HtmlAgility快速通过XPath取值)快速取出所需数据。封入界面,即可使用。

 

发现Xpath比正则更好使。

 

最后效果如下:

2

 

 

还有谁有推荐的C#爬虫,求推荐,这个源码太老,只能勉强使用,感觉速度也是一般般。

 

PS:

1、此采集会掉一些数,全站抓会费更多的时间,我不着急,慢慢采就O了。

2、可以再封装,实现任何网站的全站采集。只需要把过滤规则提取一遍,以后采集任何网站,都会比较Easy。

3、后续处理:以前是通过C#再写一遍入库的代码存Mysql。现在使用ETL工具Kettle,可以快速把Excel放进MySQL,也可以直接用Navicat导Excel进Mysql。

简单的事高效处理,不用再纠结怎么入库这种简单的活。

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: C# 使用NCrawler爬虫全站采集,3Q

C# 使用NCrawler爬虫全站采集:等您坐沙发呢!

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人