如何获取页面的“完整源代码”?

时间:2013-10-02 02:12:20

标签: c++ curl libcurl

我已经让LibCURL从网上获取页面的来源,浏览并选择数据。

一切都很好,一页。我在离线测试期间遇到此问题,同时使用ifstream并将页面源保存到.html文件中。基本上发生了什么我想是网页渲染html +数据,我希望通过js调用的部分(不是100%肯定这个)所以它不直接在源中呈现。

我在离线测试中如何解决这个问题是在Safari上下载完整的网页作为离线模式文件,我相信它被称为.webarchive文件?这样,当我将其视为源代码时,html和数据在源代码中呈现。

我已经在互联网上寻找答案,但似乎无法找到答案,任何人都可以帮我在这里设置卷曲下载网页的“丰满”吗?

以下是我目前使用的选项。

curl_easy_setopt(this->curl, CURLOPT_URL, url);
curl_easy_setopt(this->curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(this->curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0");
curl_easy_setopt(this->curl, CURLOPT_COOKIEFILE, "cookies.txt");
curl_easy_setopt(this->curl, CURLOPT_COOKIEJAR, "cookies.txt");
curl_easy_setopt(this->curl, CURLOPT_POSTFIELDS, postData); // if needed
curl_easy_setopt(this->curl, CURLOPT_WRITEFUNCTION, this->WriteCallback);
curl_easy_setopt(this->curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(this->curl);

1 个答案:

答案 0 :(得分:1)

您必须解析html并下载文档中的每个超文本引用。

当Safari下载网页时,它会将与主动缓存的该网页相关的所有内容转储到.webarchive,其中包含所有图片,css和js文件的本地参考 。这意味着它只是以加载的形式为您提供存档中所有图像的页面,并且它与实际来源不同。

您可以对href=src=(删除文档中的每个空格后)进行字符串搜索,然后以这种方式获取大部分空间的网址。

某些hrefsrc标记会有相对链接,而不是绝对链接。因此,请务必检查http://的开头,否则您必须使用url变量中的路径并连接字符串。

唯一的问题是通过JavaScript或CSS(你在传递中提到)动态加载的内容,这将使其变得困难,因为你还必须挖掘这些文件以获取对该内容的引用。 / p> 祝你好运!