1

我已经让 LibCURL 从网络上获取页面的源代码,通过它并挑选出数据。

一切都很好,只有一页。在使用 ifstream 并将页面源保存到 .html 文件时,我在离线测试期间遇到了这个问题。基本上我认为发生的事情是网页呈现html +数据,我想要通过js调用的部分(不是100%肯定)所以它没有直接在源代码中呈现。

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

我已经在互联网上寻找答案,但似乎找不到答案,任何人都可以在这里帮助我设置 curl 以“完整”下载网页吗?

这是我目前使用的选项。

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);
4

1 回答 1

1

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

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

href=您可以对and进行字符串搜索src=(在删除文档中的每个空格之后)并以这种方式获取其中大多数的 URL。

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

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

祝你好运!

于 2013-10-02T02:22:12.173 回答