我是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 ++中实现这个提取?
提前致谢
答案 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。
基本上,因为互联网不是“基于行”,所以没有简单的方法来做你想做的事情,我想知道你是否应该重新考虑你的要求。