如何使用cURL(C / C ++)从网页中获取特定行数

时间:2013-09-15 10:15:01

标签: c++ c curl libcurl

我是cURL的新手并试图实现一些应用程序,它可以允许用户从HTML页面获取特定数据(动态)并将其保存到.txt

应用程序是基于c / c ++的,到目前为止我能够获取HTML页面的整个内容。

这是我所指的代码: -

#include "stdafx.h" 
#pragma comment(lib, "curllib_static.lib") 
#include "curl/curl.h" 
#pragma comment(lib, "wldap32.lib") 
#pragma comment(lib, "ws2_32.lib") 
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "ssleay32.lib") 
#pragma comment(lib, "openldap.lib") 
#pragma comment(lib, "libeay32.lib")

void get_page(const char* url, const char* file_name)
{
  CURL* easyhandle = curl_easy_init();
 // time = 100;
  curl_easy_setopt( easyhandle, CURLOPT_URL, url ) ;

  curl_easy_setopt (easyhandle, CURLOPT_CONNECTTIMEOUT, .29);

  FILE* file = fopen( "my.txt", "a+");

  curl_easy_setopt( easyhandle, CURLOPT_WRITEDATA, file) ;
//  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

  curl_easy_perform( easyhandle );

  curl_easy_cleanup( easyhandle );
  fclose(file);

}

int main()
{
  get_page( "http:couldbeanything.com", "style.css" ) ;

  return 0;
}

所以,这段代码获取整个页面,我只想用它来获取一些特定数量的行(例如-5)

我搜索并发现了一个名为“PHP dom解析器”的东西,是否有一些方法可以在C / C ++中实现这个提取?

提前致谢

1 个答案:

答案 0 :(得分:1)

这是一个不寻常的要求,没有DOM解析器可以帮助你。相反,您应该使用一些稍高级的卷曲选项,而不是使用CURLOPT_WRITEDATA使用CURLOPT_WRITEFUNCTION。喜欢这个

curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, my_function);

...

size_t my_function(char *ptr, size_t size, size_t nmemb, void *userdata)
{
    ...
}

my_function是一个回调函数,当网页上提供了一些数据时,curl会调用my_function ptr指向可用数据,size告诉您有多少数据元素可用,nmemb告诉您每个数据元素的大小。然后,您可以使用此数据执行所需操作。据推测,在你的情况下,这意味着要提取前几行。

但是不能保证你会在一个方便的方块中获得前几行(互联网不能像那样工作),所以你有一些工作要做。有关详细信息,请查看docs

基本上,因为互联网不是“基于行”,所以没有简单的方法来做你想做的事情,我想知道你是否应该重新考虑你的要求。