抓取网页数据(金融股市实时数据)

摘要:
所以libcurl这个方案被否定了。可是对于股票这种实时更新对读取次数要求有这么高的,一般的方法都会造成数据的丢失,我能想到做的就是将数据丢失减小到最小范围。我又联想到,为什么浏览器就不会丢失数据呢?)我暂时用的方法就是利用WinInet提供的库函数来开发Internet程序。(比如运行到split函数会崩溃。)pEx-˃Delete();}}利用函数CInternetSession::OpenUrl()来实现对服务器网页的不断请求操作。也希望有想法有思路的同仁留下自己的方案。

最近查了几天的资料去写一个网页抓取股票实时数据的程序,网上一堆资料都是翻来覆去的讲解同样的方法,还有都是抓取一般的没有变化的对时间要求不要的网页数据,然而对于股票实时数据的抓取要求的是每秒钟都会由很多股票数据在发生变化,要保证程序能抓取到每秒钟这些变化着的数据,好了,出于这个目的开始在网上搜说数据,很多人建议用libcurl方法,好的,libcurl很强大用起来很简单,也想上边说的那样libcurl对于一般的没有变化的网页来说很强大,libcurl达不到每秒钟刷取网页数据10次以上的速度,而且libcurl还会有读取失败延时,而且是延时2~3秒,也就是说在这2~3秒之内网页上变化的数据抓取不到,对于股市来说这就会丢失很大一部分的数据。所以libcurl这个方案被否定了。

可是对于股票这种实时更新对读取次数要求有这么高的,一般的方法都会造成数据的丢失,我能想到做的就是将数据丢失减小到最小范围。我又联想到,为什么浏览器就不会丢失数据呢?可不可以做到像浏览器那样一笔数据都不会丢失呢?(这个问题留在这里带以后解决。)我暂时用的方法就是利用WinInet提供的库函数来开发Internet程序。以下附上代码:

void Get_Http_Data(string Url, string &buffer)
{
    try{
        CInternetSession *session = newCInternetSession();
        CHttpFile* pfile = (CHttpFile *)session->OpenURL(Url.c_str(),1,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE);
        if( NULL ==pfile )
        {
            LOG(1)("网络连接中断 或 请求连接失败!");
            session->Close();
            return;
        }

        DWORD dwStatusCode;
        pfile ->QueryInfoStatusCode(dwStatusCode);

        if(dwStatusCode ==HTTP_STATUS_OK)
        {
            CString data;
            while (pfile ->ReadString(data))
            {
                if( !data.IsEmpty())
                {
                    buffer.append(data.GetBuffer(0));
                    buffer.append("");
                }
            }
        } 
        pfile->Close();
        delete pfile;
        session->Close();
    }
    catch(CInternetException *pEx)   //这里一定要做异常抛出,考虑到如果程序正在运行中突然客户端网络中断,那么做异常抛出就会即使提示错误并终止。
    {                                //如果不做异常判断的话,程序就会继续运行这样导致buffer为空,记下来的操作万一没有考虑到buffer为空的情况就
        pEx->ReportError();          //会导致程序崩溃,因为buffer为空内存无法操作。(比如运行到split函数会崩溃。)
        pEx->Delete();
    }
}

利用函数CInternetSession::OpenUrl()来实现对服务器网页的不断请求操作。其中标志:INTERNET_FLAG_RELOAD是强制重复读取网页。

以上程序即方法。其他更优化的方法正在研究中。。。也希望有想法有思路的同仁留下自己的方案。

免责声明:文章转载自《抓取网页数据(金融股市实时数据)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ansible基础语法介绍如何把一段逗号分割的字符串转换成一个数组?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Sql Server 2012 数据库同步方式 (发布、订阅)

上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作。发布订阅份为两个步骤:1、发布。2订阅。首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅。发布可以发布一张表的部分数据,也可以对整张表进行发布。下面分别介绍发布、订阅的过程。   1、发布。发...

linux c libcurl的简单使用(转)

curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。看一个简单的例子: 1 #include <curl/curl.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 CURL *curl; 6 CURLcode...

Python3下利用JsonPath解析数据

前言 常见Web接口返回数据的时候,大部分是以 JSON 的形式返回,如果返回数据量不大的话,我们可以直接通过 字典取值 或 正则取值 的方式来直接获取。 但如果接口返回数据量比较大,或者嵌套的层级非常深,这种情况下使用 字典取值 就会变得有点困难;而 正则取值 虽然是万能的方法,但其只针对字符串才能使用。 那么在 Python 中,对于以上情况,有没有更...

授权某个数据库某个表权限

revoke SELECT ON `open`.`admins` from wuzg;revoke SELECT ON *.* from wuzg;show GRANTS for wuzg;GRANT SELECT ON open.admins TO 'wuzg'@'%'...

mysql 树形数据,层级数据Managing Hierarchical Data in MySQL

原文:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 引言大多数用户都曾在数据库中处理过分层数据(hierarchical data),认为分层数据的管理不是关系数据库的目的。之所以这么认为,是因为关系数据库中的表没有层次关系,只是简单的平面化的列表;而分层数据具有父...

sqlserver 获取实例上用户数据库的数据字典

原理很简单:将获取数据字典信息(通过动态视图获取)存入到目标表(数据字典表)中即可。 本人自用实例 1)创建相关的字典表 useYWMonitor GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO if not exists (select * fro...