• Stars
    star
    277
  • Rank 148,875 (Top 3 %)
  • Language
    C#
  • Created over 8 years ago
  • Updated about 5 years ago

Reviews

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

Repository Details

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

基于浏览器内核的高级爬虫

基于C#.NET+PhantomJS+Sellenium的高级网络爬虫程序。可执行Javascript代码、触发各类事件、操纵页面Dom结构、甚至可以移除不喜欢的CSS样式。

很多网站都用Ajax动态加载、翻页,比如携程网的评论数据。如果是用之前那个简单的爬虫,是很难直接抓取到所有评论数据的,我们需要去分析那漫天的Javascript代码寻找API数据接口,还要时刻提防对方增加数据陷阱或修改API接口地。

如果通过高级爬虫,就可以完全无视这些问题,无论他们如何加密Javascript代码来隐藏API接口,最终的数据都必要呈现在网站页面上的Dom结构中,不然普通用户也就没法看到了。所以我们可以完全不分析API数据接口,直接从Dom中提取数据,甚至都不需要写那复杂的正则表达式。

主要特性

  • 支持Ajax请求事件的触发及捕获;
  • 支持异步并发抓取;
  • 支持自动事件通知;
  • 支持代理切换;
  • 支持操作Cookies;

运行截图

  • 抓取酒店数据

抓取酒店数据

  • 抓取评论数据

抓取酒店评论

示例代码

    /// <summary>
    /// 抓取酒店评论
    /// </summary>
	static void Main(string[] args)
    {
        var hotelUrl = "http://hotels.ctrip.com/hotel/434938.html";
        var hotelCrawler = new StrongCrawler();
        hotelCrawler.OnStart += (s, e) =>
        {
            Console.WriteLine("爬虫开始抓取地址:" + e.Uri.ToString());
        };
        hotelCrawler.OnError += (s, e) =>
        {
            Console.WriteLine("爬虫抓取出现错误:" + e.Uri.ToString() + ",异常消息:" + e.Exception.ToString());
        };
        hotelCrawler.OnCompleted += (s, e) =>
        {
            HotelCrawler(e);
        };
        var operation = new Operation
        {
            Action = (x) => {
                //通过Selenium驱动点击页面的“酒店评论”
                x.FindElement(By.XPath("//*[@id='commentTab']")).Click();
            },
            Condition = (x) => {
                //判断Ajax评论内容是否已经加载成功
                return x.FindElement(By.XPath("//*[@id='commentList']")).Displayed && x.FindElement(By.XPath("//*[@id='hotel_info_comment']/div[@id='commentList']")).Displayed && !x.FindElement(By.XPath("//*[@id='hotel_info_comment']/div[@id='commentList']")).Text.Contains("点评载入中");
            },
            Timeout = 5000
        };

        hotelCrawler.Start(new Uri(hotelUrl), null, operation);//不操作JS先将参数设置为NULL

        Console.ReadKey();
    }

More Repositories

1

Simple-Web-Crawler

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

Captcha-Recognizer

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

Encryption-Web-Chat

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

NETCore-Snowflake-Framework

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

ETH-Mutiple-Token-Staking

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

MOVE-NFT-MARKET

一款基于MOVE语言开发的的NFT交易市场,这个语言目前还很初级,内置可用的API很少,很多功能都只能用变通的办法实现。
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