搜索HTML行并删除不以该行开头的行

时间:2011-02-17 22:43:10

标签: c++ html parsing

我有一个HTML文件,我从网站上获得了非常糟糕的格式化代码,我想提取一些非常小的信息。

我只对以这样开头的行感兴趣:

</form></td><td><a href="http://www.mysite.com/users/user897" class="username">   <b>user897</b></a></td></tr><tr><td>HouseA</td><td>2</td><td class="entriesTableRow-gamename">HouseA Type12 <span class="entriesTableRow-moredetails"></span></td><td>1 of 2</td><td>user123</td><td>10</td><td>

我想提取3个字段:

  A:HouseA
  B:HouseA Type12
  C:user123
  D:10

我知道我见过人们推荐HTML Agility Pack和lib2xml,但我真的不认为我需要这一切。我的应用程序是用C / C ++。

我已经在使用getline开始读行了,我只是不确定什么是最好的方法。谢谢!

    std::ifstream  data("Home.html");
    std::string line;
    while(std::getline(data,line))
    {
        linenum++;
        std::stringstream  lineStream(line);
        std::string       user;
        if (strncmp(line.c_str(), "</form></td><td>",strlen("</form></td><td>")) == 0)
        {

            printf("found a wanted line in line:%d\n", linenum);
        }

    }

1 个答案:

答案 0 :(得分:2)

在一般情况下,XML / HTML解析器可能是最好的方法,因为它对于不同的输入会很健壮。 (无论你做什么,don't use regexps!)

<强>更新

但是,如果您要定位特定输入,就像您正在做的那样,您可以使用sscanf(如您所示)或cin.read()或regexp手动扫描。

请注意,此代码可能随时在HTML更改时中断(即使只是使用空格)。

因此,我/我们的建议是使用适当的工具来完成工作。 XML / HTML不是原始文本,不应该被视为原始文本。

如何编写python脚本呢? :)