首页
分类
标签
存档
黑客派
订阅
搜索
开始使用
2016 年 09 月
0 篇文章
UrlSeen 用来做 url 去重。对于一个大的爬虫系统,它可能已经有百亿或者千亿的 url,新来一个 url 如何能快速的判断 url 是否已经出现过非常关键。因为大的爬虫系统可能一秒钟就会下载几千个网页,一个网页一般能够抽取出几十个 url,而每个 url 都需要执行去重操作,可想每秒需要执行大量的去重操作。因此 UrlSeen 是整个爬虫系统中非常有技术含量的一个部分。为了提高过滤的效率,我们使用有极低误判率但是效率
UrlFilter 则是对提取出来的 URL 再进行一次筛选。不同的应用筛选的标准是不一样的,比如对于 baidu/google 的搜索,一般不进行筛选,但是对于垂直搜索或者定向抓取的应用,那么它可能只需要满足某个条件的 url,比如不需要图片的 url,比如只需要某个特定网站的 url 等等。UrlFilter 是一个和应用密切相关的模块。usingSystem;usingSystem.Collections.Gen
Extractor 的工作是从下载的网页中将它包含的所有 URL 提取出来。这是个细致的工作,你需要考虑到所有可能的 url 的样式,比如网页中常常会包含相对路径的 url,提取的时候需要将它转换成绝对路径。这里我们选择使用正则表达式来完成链接的提取。html 标签中的链接地址通常会出现在 href 属性或者 src 属性中,所以我们采用两个正则表达式来匹配网页中的所有链接地址。网页链接提取器 Extractor 类:usi
MVC 学习笔记索引帖【MVC 学习笔记】1.项目结构搭建及单个类在各个层次中的实现【MVC 学习笔记】2.使用 T4 模板生成其他类的具体实现【MVC 学习笔记】3.使用 Spring.Net 应用 IOC(依赖倒置)【MVC 学习笔记】4.使用 Log4Net 来进行错误日志的记录【MVC 学习笔记】5.使用 Controller 来代替 Filter 完成登录验证(Session 校验)【MVC 学习笔记】6.使用 Memcache
最近 DotNetCore 更新到了 1.0.1,Azuretools 也更新到了 2.9.5,尝试更新时发现,DotNetCore 更新失败,提示:0x80072f8a 未指定的错误,而 AzureTools 中也包含了 DotNetCore 的更新,0x80072f8a 问题,导致两个软件都不能成功地完成更新。研究安装的错误日志后才发现,原来使因为证书过期导致的无法下载微软在线资源,所以无法成功安装,解决证书问题之后就
普里姆算法(Prim 算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex(graphtheory)),且其所有边的权值之和亦为最小。该算法于 1930 年由捷克数学家沃伊捷赫·亚尔尼克(英语:VojtěchJarník)发现;并在 1957 年由美国计算机科学家罗伯特·普里姆(英语:RobertC.Prim)独立发
在之前的项目中,如果有需要使用验证码,基本都是自己用 GDI+ 画图出来,简单好用,但是却也存在了一些小问题,首先若较少干扰线,则安全性不是很高,验证码容易被机器识别,若多画太多干扰线条,机器人识别率下降的同时,人眼的识别率也同步下降(震惊哭)。更为重要的是,GDI+ 绘制的验证码一般来说也不会很美观,如果做一个炫酷的登陆界面却配了这样一个验证码,画风诡异,丑到极致。再后来浏览网页的过程中,发现很多很多网
最近听闻数据结构与算法实践课的老师又出了和上年一样的选题,不禁想起了去年自己完成作业时的点点滴滴,遗憾当时没有写博客的习惯,之前的一些心得这一年实践的过去也逐渐淡忘了,突然就有了总结一下的想法,希望能有新的收获吧。由于当时也没注意保存,软件完成过程中的一些文档早已丢失了,幸运的是 Winform 版源码还在,Unity3D 版程序也还幸存,虽然由于时间紧张只完成了大概框架,但美观程度也远非 Winform 可
为了解决单机处理的瓶颈,增强软件的可用性,我们需要将软件部署在多台服务器上启用多个二级子域名以频道化的方式,根据业务功能将网站分布部署在独立的服务器上,或通过负载均衡技术(如:DNS 轮询、Radware、F5、LVS 等)让多个频道共享一组服务器。当我们将网站程序分部到多台服务器上后,由于 Session 受实现原理的局限,无法跨服务器同步更新 Session,使得登录状态难以通过 Session 共享。我们使
之前的学习中,在对 Session 校验完成登录验证时,通常使用 Filter 来处理,方法类似与前文的错误日志过滤,即新建 Filter 类继承 ActionFilterAttribute 类,重写 OnActionExecuting 方法,之后直接在需要验证的 Action 前加上 Filter 标记即可。Filter 式实现新建登陆校验类新建登陆校验类 CheckLoginAttributeusingSystem.Web.M
在 Web 应用运行过程中,我们难免会遇到程序运行异常,这个时候我们就应该将异常信息记录下来,以便开发人员和维护人员对异常原因进行还原,对异常原因进行修复。在 ASP.NET 平台中进行日志记录的组件也有很多,如 Log4Net、CommonLogging 等,我们这里选用 Log4Net 进行异常日志的记录。捕获异常在 ASP.NETMVC 中提供了一个全局的异常处理过滤器:HandleErrorAttribute,
本篇我们将使用 Spring.Net 进行依赖导致。到现在,我们已经基本搭建起了项目的框架,但是项目中还存在一个问题,就是尽管层与层之间使用了接口进行隔离,但实例化接口的时候,还是引入了接口实现类的依赖,如下面的代码:privateIUserService_userService;privateIUserServiceUserService{get{return_userService??(_userS
在前篇中我们已经将 User 类中的代码做了具体的实现,但仍然有多个实体类未实现,以后可能还会增加新的数据表,数据表结构也有可能发生变化,所以我们使用 T4 模板来完成类的生成,这样就算数据库表发生了改变,也会自动根据改变后的实体对类进行重新生成。DAL 层下面是数据访问层的 T4 模板文件 Dal.tt<#@templatelanguage="C#"debug="false"hostspecific="true"
新人刚开始学习 ASP.NETMVC,若有不足之处希望能得到您的指点,不胜感激!层级结构先来一张项目的层级结构图:Model:模型层,主要是各种类型、枚举以及 ORM 框架,框架完成数据库和实体类的映射。项目中选用了微软的开源 ORM 框架 EntityFramework6.0(以下简称 EF),数据库则选择了微软的轻量级数据库 SQLServerCompact4.0 本地数据库(简称 Compact),Compact
Internet 上的一些站点常常存在着镜像网站(mirror),即两个网站的内容一样但网页对应的域名不同。这样会导致对同一份网页爬虫重复抓取多次。为了避免这种情况,对于每一份抓取到的网页,它首先需要进入 ContentSeen 模块。该模块会判断网页的内容是否和已下载过的某个网页的内容一致,如果一致,则该网页不会再被送去进行下一步的处理。这样的做法能够显著的降低爬虫需要下载的网页数。至于如果判断两个网页
为了便于使用及日后的扩展,将 Scrapy 简单封装为了 Requester。具体代码如下:usingSystem;usingSystem.Collections.Generic;usingCrawler.Common;namespaceCrawler.Protocol{publicclassRequester{privateUriUrl{get;set;}privateBrowserBrowser{ge
之前我们已经基于 ARSoft.Tools.Net 简单实现了 DNS 解析模块的功能,但是当性能要求升高时,每一次爬取都要进行 DNS 请求,甚至很有可能一段时间内每次请求的都是相同的地址,频繁的 DNS 请求就会成为性能瓶颈,所以我们要通过缓存机制将 DNS 解析结果缓存下来,降低 DNS 解析操作,提升系统性能。如此,我们基于之前封装的 MemoryCacheHelper 类对 DnsResolver 类进行改造:using
在完成了 DNS 解析模块之后,我意识到了 DNS 缓存机制也很有必要。在 Redis,Memcache,和.Net 自带的 Cache 之间,考虑到部署问题,最终选择了后者,之前在学习 Web 及开发的过程中用过 System.Web.Caching.Cache 这个类库,但是这次的爬虫程序我打算部署为桌面软件,所以选用了 System.Runtime.Caching.MemoryCache(后期如有必要也会加入 Syste
最近在做爬虫的作业,今天学习的内容是关于 DNS 解析模块的制作的。使用的库为 ARSoft.Tools.Net,它是一个非常强大的开源 DNS 控件库,包含.NetSPFvalidation,SenderIDvalidation 以及 DNSClient、DNSServer 接口。使用该接口可轻松实现 DNS 客户请求端及服务器解析端。项目地址:http://arsofttoolsnet.codeplex.com/,
最近因为一个作业需要完成 CNKI 爬虫,研究爬虫架构的时候发现了这个疑似移植于 Python 的著名开源爬虫框架 Scrapy 的 ScrapySharp,然而在网上寻找之后只发现了这个 F#的 Demo,就使用原文中示例的网站写了这个 C#版本的代码。实现下面是代码:usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Threading.Tasks;usi