使用C ++解析文本文件(包含HTML)

时间:2014-08-29 23:42:14

标签: html c++ parsing webpage

我已经能够以html网页的形式获取一些原始数据,我将其放入普通的文本文件中。我目前正在尝试使用C ++程序来解析这个文件,但出于某种原因,它给了我奇怪的输出,因为它将@s,符号和^ Ms放在每个单独的文件中信件。我不确定这是因为我是在尝试解析HTML文件,还是因为我的代码错误,但是我已经在较小的HTML文件上尝试了我的代码它工作正常。我想要它的文件只有145kB

这是我的代码:

#include <iostream>
#include <fstream> 
#include <string>

using namespace std;

int main(int argc, char** argv)
{
  ifstream inFile;
  inFile.open(argv[1]);
  string str;

  while(getline(inFile, str))
  {
    cout << str << endl;
  }

}

如果有人能告诉我为什么这不起作用,我会非常感激。

2 个答案:

答案 0 :(得分:0)

尝试这是否适合您。

#include <iostream>
#include <fstream> 
#include <string>

using namespace std;

int main(int argc, char** argv)
{
  wifstream inFile;
  inFile.open(argv[1]);
  wstring str;

  while(getline(inFile, str))
  {
      wcout << str << endl;
  }
}

答案 1 :(得分:0)

HTML文件几乎可以采用任何编码形式。 OP需要根据它所具有的编码打开文件,该文件通常由作为页面服务的一部分获得的Web浏览器提供。请注意,同一网站提供的每个个别网页可能包含不同的编码。 “@”实际上可能打印为“^ @”,如果给它们为空字符,这就是许多输出例程将打印的内容。他可能有一个UTF-16文件,并且正在读取它,假设它是ASCII 8位。

他还需要了解机器之间的“换行”惯例有所不同;他的“^ M”可能意味着他在Unix机器上运行(认为“^ J”是一个换行符,他从Windows框中获取了他的文件,认为“^ M ^ J”是一个换行符。欢迎现实世界。

接下来,OP会发现解析HTML实际上很难,因为它很复杂,有很多疯狂的字符约定(超出编码范围),而且往往只是非法因为浏览器允许它,而不是每次检查都是HTML很干净。