gpt4 book ai didi

html - C++:如何递归/迭代搜索 HTML 文件(使用 Boost C++)?

转载 作者:行者123 更新时间:2023-11-28 06:41:48 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我需要通过搜索字符串获取 HTML 文件(从 Web)并获取一条信息。

我认为将 HTML 文件视为 XML 文件并遍历 HTML 文件中的标签并将内容与字符串匹配会更有效、更容易。

这是我感兴趣的 HTML 表格:

<table width='100%' class='datatable' cellspacing='0' cellpadding='0'>
<tr>
<td>
</td>
<td width='30px'>
</td>
<td width='220px'>
</td>
<td width='50px'>
</td>
</tr>
<tr>
<td height='7' colspan='4'>
<img src='/images/spacer.gif' width='1' height='7' border='0' alt=''>
</td>
</tr>
<tr>
<td width='170'>
Aktiv tid: <!--This is a string I will search for.-->
</td>
<td colspan='3'>
1 dag, 17:03:46 <!--This is a piece of information I need to obtain.-->
</td>
</tr>
<tr>
<td height='7' colspan='4'>
<img src='/images/spacer.gif' width='1' height='7' border='0' alt=''>
</td>
</tr>
<tr>
<td width='170'>
Bandbredd (upp/ned) [kbps/kbps]:
</td>
<td colspan='3'>
1.058 / 21.373
</td>
</tr>
<tr>
<td height='7' colspan='4'>
<img src='/images/spacer.gif' width='1' height='7' border='0' alt=''>
</td>
</tr>
<tr>
<td width='170'>
Överförda data (skickade/mottagna) [GB/GB]: <!--This is another string I will search for.-->
</td>
<td colspan='3'>
1,67 / 42,95 <!--This is another piece of information I need to obtain.-->
</td>
</tr>
</table>

所以我将搜索 <td>包含以下任一字符串的标签:

  • 事件时间:
  • Överförda 数据(skickade/mottagna)[GB/GB]:

之后我需要选择下一个 <td>包含我想要的信息的标签(在同一个 <tr> 中。

我使用 cURL 成功获取了 HTML 文件,但在 XML 搜索算法方面需要一些帮助。

提前致谢!

(编辑:这是我想要的应用程序的伪代码(应该是不言自明的):

extern "C" {
#include "url.h"
}

#include <string>
#include <iostream>

std::string xmlSearch(std::string fn, std::string str);

int main(void)
{
/* download HTML file from URL to file */
url("http://myurl.com/","page.html");

/* search page.html for "Aktiv tid:" and return the content of the next <td> tag. */
std::string data0 = xmlSearch("page.html","Aktiv tid:");

/* search page.html for "Överförda data (skickade/mottagna) [GB/GB]:" and return the content of the next <td> tag. */
std::string data1 = xmlSearch("page.html","Överförda data (skickade/mottagna) [GB/GB]:");

/* process results */
}

std::string xmlSearch(std::string fn, std::string str){
/* perform search algorithim */

/* return content of the next <td> tag. */
}

)

最佳答案

我可以想象自己使用一个快速而肮脏的脚本来做这件事,而不是使用 C++,真的。

一行:

(tidy -asxml input.xml | xmllint --xpath 'descendant-or-self::*[starts-with(text(), "Aktiv tid:")]/following-sibling::*/text()' -) 2>/dev/null 

这里

  • tidy 将古怪的 html 转换为 xml
  • xmllint 查询它:

    • 来自*(任何元素)[starts-with(text(), "Aktiv tid:")]
    • 从以下同级中选择text()
  • 2>/dev/null 用于抑制来自 tidyxmllint

Presto,它打印:

1 dag, 17:03:46 

针对您的问题的精确输入。

关于html - C++:如何递归/迭代搜索 HTML 文件(使用 Boost C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com