0

我是 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 parser”的东西,有没有办法在 C/C++ 中实现这个获取?

提前致谢

4

1 回答 1

1

这是一个不寻常的要求,没有 DOM 解析器可以帮助您。相反,您应该使用一些更高级的 curl 选项,而不是使用CURLOPT_WRITEDATAuse 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是一个回调,当网页中有一些数据可用时my_function,curl 将调用ptr指向可用数据,size告诉你有多少数据元素可用,并nmemb告诉你每个数据元素的大小。然后你可以用这些数据做你想做的事。大概在您的情况下,这意味着提取前几行。

但是不能保证你会在一个方便的区块中获得前几行(互联网不是这样工作的),所以你有一些工作要做。查看文档以获取更多信息。

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

于 2013-09-15T10:29:06.867 回答