我打算从这个网站获取数据
http://www.gpw.pl/akcje_i_pda_notowania_ciagle
(这是波兰主要股票市场的一个网站)
我有一个用C ++编写的程序,可以将该站点的源代码下载到该文件中。 但问题是它不包含我感兴趣的东西 (股票的价值当然)。
如果您将此网站来源与“查看元素”选项进行比较(RMB - >查看元素) 你可以看到“View element”确实包含了股票的价值。
<td>75.6</td>
<tr class="even red">
等等......
下载的网站来源没有此信息。
所以我们有两个问题
1)为什么网站的来源与“查看元素”选项不同?
2)如何转移我的程序以便下载正确的代码?
#include <string>
#include <iostream>
#include "curl/curl.h"
#include <cstdlib>
using namespace std;
// Write any errors in here
static char errorBuffer[CURL_ERROR_SIZE];
// Write all expected data in here
static string buffer;
// This is the writer call back function used by curl
static int writer(char *data, size_t size, size_t nmemb,
string *buffer)
{
// What we will return
int result = 0;
// Is there anything in the buffer?
if (buffer != NULL)
{
// Append the data to the buffer
buffer->append(data, size * nmemb);
// How much did we write?
result = size * nmemb;
}
return result;
}
// You know what this does..
void usage()
{
cout <<"curltest: \n" << endl;
cout << "Usage: curltest url\n" << endl;
}
/*
* The old favorite
*/
int main(int argc, char* argv[])
{
if (argc > 1)
{
string url(argv[1]);
cout<<"Retrieving "<< url << endl;
// Our curl objects
CURL *curl;
CURLcode result;
// Create our curl handle
curl = curl_easy_init();
if (curl)
{
// Now set up all of the curl options
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
// Attempt to retrieve the remote page
result = curl_easy_perform(curl);
// Always cleanup
curl_easy_cleanup(curl);
// Did we succeed?
if (result == CURLE_OK)
{
cout << buffer << "\n";
exit(0);
}
else
{
cout << "Error: [" << result << "] - " << errorBuffer;
exit(-1);
}
}
}
return 0;
}
答案 0 :(得分:0)
因为使用JavaScript填充了值。
“查看源代码”显示页面的原始来源,而“查看元素”显示文档树当前所处的状态。
没有简单的方法可以修复它,因为您需要执行JavaScript或将其移植到C ++(它可能会让您在交换时不受欢迎)。
答案 1 :(得分:0)
当我将页面保存为html文件(文件/另存为)时,我会收到一个文件,其中包含浏览器中显示的所有数据,但未在页面源中找到(我使用的是Chrome)。
所以我建议你在代码中添加一个步骤: