• Stars
    star
    289
  • Rank 138,646 (Top 3 %)
  • Language
    C#
  • Created almost 8 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

基于C#.NET的简单网页爬虫,支持异步并发、切换代理、操作Cookie、Gzip加速。

简单且高效的网站爬虫

基于C#.NET的简单网页爬虫,支持异步并发、设置代理、操作Cookie、Gzip页面加速。

主要特性

  • 支持Gzip根据网页内容自动解压,加快爬虫载入速度;
  • 支持异步并发抓取;
  • 支持自动事件通知;
  • 支持代理切换;
  • 支持操作Cookies;

运行截图

  • 抓取城市列表

使用正则表达式清洗数据

  • 抓取酒店列表

抓取城市下的酒店列表

示例代码

    /// <summary>
    /// 抓取城市列表
    /// </summary>
    public static void CityCrawler() {
        
        var cityUrl = "http://hotels.ctrip.com/citylist";//定义爬虫入口URL
        var cityList = new List<City>();//定义泛型列表存放城市名称及对应的酒店URL
        var cityCrawler = new SimpleCrawler();//调用刚才写的爬虫程序
        cityCrawler.OnStart += (s, e) =>
        {
            Console.WriteLine("爬虫开始抓取地址:" + e.Uri.ToString());
        };
        cityCrawler.OnError += (s, e) =>
        {
            Console.WriteLine("爬虫抓取出现错误:" + e.Uri.ToString() + ",异常消息:" + e.Exception.Message);
        };
        cityCrawler.OnCompleted += (s, e) =>
        {
            //使用正则表达式清洗网页源代码中的数据
            var links = Regex.Matches(e.PageSource, @"<a[^>]+href=""*(?<href>/hotel/[^>\s]+)""\s*[^>]*>(?<text>(?!.*img).*?)</a>", RegexOptions.IgnoreCase);
            foreach (Match match in links)
            {
                var city = new City
                {
                    CityName = match.Groups["text"].Value,
                    Uri = new Uri("http://hotels.ctrip.com" + match.Groups["href"].Value
                )
                };
                if (!cityList.Contains(city)) cityList.Add(city);//将数据加入到泛型列表
                Console.WriteLine(city.CityName + "|" + city.Uri);//将城市名称及URL显示到控制台
            }
            Console.WriteLine("===============================================");
            Console.WriteLine("爬虫抓取任务完成!合计 " + links.Count + " 个城市。");
            Console.WriteLine("耗时:" + e.Milliseconds + "毫秒");
            Console.WriteLine("线程:" + e.ThreadId);
            Console.WriteLine("地址:" + e.Uri.ToString());
        };
        cityCrawler.Start(new Uri(cityUrl)).Wait();//没被封锁就别使用代理:60.221.50.118:8090
    }

More Repositories

1

Strong-Web-Crawler

基于C#.NET+PhantomJS+Sellenium的高级网络爬虫程序。可执行Javascript代码、触发各类事件、操纵页面Dom结构。
C#
276
star
2

Captcha-Recognizer

基于C#.NET异步图形验证码识别组件(集成了若快、优优云、打码兔、云打码等平台,准确率95%,速度2-6秒)采用策略设计模式
C#
236
star
3

Encryption-Web-Chat

基于.NET Core + SignalR 的多人聊天室。
C#
71
star
4

NETCore-Snowflake-Framework

雪花框架:基于.NET Core + Mysql + Redis + RabbitMQ 设计的高性能多层架构,涵盖了仓储设计模式、全局日志、JWT授权认证、Swagger API管理、请求时间统计等功能,Docker配置文件、服务安装文件等。
C#
62
star
5

EOS-Bancor-Exchange-Dapp

Bancor区块链交易所应用,此应用主要是利用Bancor算法实现的去中心化交易所,实现了EOS区块链上无需挂单、无对手盘的去中心化交易系统,完全通过智能合约算法自动对代币进行涨跌,省去了传统挂单买卖交易代币的复杂度。
C++
5
star
6

VUE-Snowflake-Framework

雪花框架:使用VUE+Vite+Pinia+Iconify+Echart+I18n+Windicss+搭建的前端框架,便于敏捷开发使用。
Vue
2
star
7

MOVE-NFT-MARKET

一款基于MOVE语言开发的的NFT交易市场,这个语言目前还很初级,内置可用的API很少,很多功能都只能用变通的办法实现。
2
star
8

ETH-Mutiple-Token-Staking

ETH2.0可乐质押系统,支持ETH及ERC20代币质押,并生成各个币种的锚定币。在提现时自动销毁锚定币,同时返还用户质押的原币种。
Solidity
2
star
9

ReactNative-Network-App

对于一个经常Google的技术人来说,回到国内才能体会被限制自由的酸楚。尽管自己搭了ss,但App Store里的软件被全被下了架。索性就用React-Native加IOS原生的NEKit组件来写一个自己用的App,虽然不能上架App Store,但可以安装到自己的手机和平板上。
2
star
10

EOS-Buy-Name-Dapp

此应用主要为了实现Paypel、微信来直接购买区块链资源,由于EOS区块链账号需要质押代币、购买内存、CPU、网络等资源,对于普通用户来说操作过于复杂,此应用可以一键支付后自动完成所有操作,方便普通用户快速上手区块链。
C++
2
star
11

EOS-Coin-Race-Dapp

币价赛跑区块链游戏,此游戏是一款区块链赛跑游戏,通过采集第三方币价在一定时间内的涨幅,转换成赛道来进行赛跑比赛,用户可以竞猜哪个币跑的最快,是一款纯消遣娱乐的游戏。
C++
2
star
12

GO-Snowflake-Framework

雪花框架:基于GO语言的服务端框架,集成了Fiber、Cobra、Log、Redis、Mysql等基础组件,示例包含JTW授权及签名方法。定时打印内存、协程状态,适用于高性能CLI、Web、Network服务开发。
Go
1
star
13

ETH2.0-Safe-Staking-Service

ETH2.0可乐矿池质押服务
Solidity
1
star
14

uniswap-v2-v3-arbitrage

Go
1
star
15

EOS-Dragon-Bidding-Dapp

接龙竞拍区块链游戏,此游戏主要是以成语接龙为核心思想研发而成,用户可以通过点数挖矿的方式获得代币,同时根据其挖矿的点数进行接龙,如果用户的点数与之前其他用户的点数相同,则获得挖矿的代币奖励。
C++
1
star
16

IOS-Android-Mining-App

苹果安卓双端算力挖矿,这是一款算力挖矿的移动端应用,主要功能是按照用户的质押金额、质押占比、推荐人数、活跃用户等多个维度生成不同大小的算力,每天按时间+算力实现不同收益的挖矿。
1
star