[爬虫学习笔记]ScrapySharp简单封装为Requester

为了便于使用及日后的扩展,将Scrapy简单封装为了Requester,具体代码如下:

using System;
using System.Collections.Generic;
using Crawler.Common;

namespace Crawler.Protocol
{
    public class Requester
    {
        private Uri Url { get; set; }
        private Browser Browser { get; set; }

        public Requester(string url, Dictionary<string, string> headers = null, Browser browser = null)
        {
            var u = new Uri(url);
            //检测地址是域名还是IP地址,如果是域名,则使用DnsResolver解析为IP地址
            var leftPart = u.GetLeftPart(UriPartial.Authority).Replace(u.GetLeftPart(UriPartial.Scheme), "");
            //正则匹配是否为IP地址
            if (!RegexHelper.IsMatch(leftPart, @"\d+\.\d+\.\d+\.\d+\w"))
            {
                var dns = new DnsResolver(leftPart);
                if (dns.IsSuccess)
                    u = new Uri(url.Replace(leftPart, dns.Record.Address.ToString()));
            }
            Url = u;
            Browser = browser ?? new Browser();
            if (headers == null) return;
            foreach (var header in headers)
                Browser.Headers[header.Key] = header.Value;
        }

        public string GetHtml()
        {
            return Browser.DownloadString(Url);
        }

        public byte[] GetFile()
        {
            return Browser.NavigateToPage(Url).RawResponse.Body;
        }
    }
}

考虑到可能对ScrapyBrowser做一些扩展(例如增加对FTP等其他协议的支持),故新建了Browser类继承自ScrapyBrowser类:

using ScrapySharp.Network;

namespace Crawler.Protocol
{
    public class Browser : ScrapingBrowser
    {

    }
}
时间: 2024-08-27 21:41:41

[爬虫学习笔记]ScrapySharp简单封装为Requester的相关文章

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb

node.js在windows下的学习笔记(2)---简单熟悉一些命令

1.打开如下的安装 2.输入node -v,显示node的版本号 3.输入node --help.显示帮助命令 4.自己用一个文本编辑器编写一下代码,保存为text.js,然后在控制台输入node.exe  text.js的路径(直接把这个js文件拖到控制台自动显示路径),按下回车键 var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {&

加壳学习笔记(三)-简单的脱壳思路&amp;调试思路

首先一些windows的常用API: GetWindowTextA:以ASCII的形式的输入框 GetWindowTextW:以Unicaode宽字符的输入框 GetDlgItemTextA:以ASCII的形式的输入框 GetDlgItemTextW:以Unicaode宽字符的输入框 这些函数在使用的时候会有些参数提前入栈,如这函数要求的参数是字符串数目.还有大小写啦之类的东西,这些东西是要在调用该函数之前入栈,也就是依次push,就是说一般前面几个push接着一个call,那前面的push可能

Node.js学习笔记(3) - 简单的curd

这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简单介绍 这次demo,只涉及到简单的curd操作,用到的数据库是mongo,所以要安装mongo数据库,数据库连接驱动是mongoose: 当然关于mongo的驱动有很多,比如mongous mongoskin等:(详见http://cnodejs.org/topic/4f4ca8e0940ce2e

Sharepoint2013商务智能学习笔记之简单概述(一)

SharePoint 2013 中的商业智能 (BI) 提供集 Microsoft Office 应用程序和其他 Microsoft 技术于一体的全面的 BI 工具.这些 BI 工具有:Excel 2013.SharePoint 2013 中的 Excel Services.SharePoint Server 2013 中的 PerformancePoint Services.SharePoint 中的 Visio Services.SharePoint 2013 和 Microsoft SQL

爬虫学习之一个简单的网络爬虫

这是一个网络爬虫学习的技术分享,主要通过一些实际的案例对爬虫的原理进行分析,达到对爬虫有个基本的认识,并且能够根据自己的需要爬到想要的数据.有了数据后可以做数据分析或者通过其他方式重新结构化展示. 什么是网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫.via 百度百科网络爬虫 网络蜘蛛(Web spider)也叫网络爬虫(Web c

[爬虫学习笔记]基于 SimHash 的去重复处理模块ContentSeen的构建

      Internet上的一些站点常常存在着镜像网站(mirror),即两个网站的内容一样但网页对应的域名不同.这样会导致对同一份网页爬虫重复抓取多次.为了避免这种情况,对于每一份抓取到的网页,它首先需要进入ContentSeen模块.该模块会判断网页的内容是否和已下载过的某个网页的内容一致,如果一致,则该网页不会再被送去进行下一步的处理.这样的做法能够显著的降低爬虫需要下载的网页数.至于如果判断两个网页的内容是否一致,一般的思路是这样的:并不会去直接比较两个网页的内容,而是将网页的内容经

CSS学习笔记09 简单理解BFC

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>BFC</title> 6 <style type="text/css"> 7 .div1 {background-color: #FCE38A; width: 200px; height: 100px;}

简单的爬虫学习笔记

作为一只小白刚开始学python,听到用python写爬虫就感觉十分的高端.当我看到知乎大佬们写爬虫用了各种库更懵逼了. 其实基础爬虫可以直接用python自带的库urllib,re(但确实用了requests后就不想用urllib) 写程序一定要心里有点B数, >>>所以不妨先来想想我的爬虫是来干什么的 emmmm,小姐姐照片,我戳的美照.确立小目标后就准备开始了. >>>爬虫到底是什么 还是很懵逼,我又要如何获取图片呢? 这时候我的html知识用上了:图片都是通过链