C ++:如何从网站HTML中将多个URL提取到向量中?

时间:2018-03-31 23:26:13

标签: html c++ url extraction

我的问题是,我在std::string内部有一个网站的HTML正文,现在我要将所有内部网址提取到std::vector< std::string >。我知道如何使用正则表达式来检查字符串是否是一个URL,但我不知道如何将所有URL提取到std::vector

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

要从HTML文档中有意义地提取数据,您需要解析HTML。 HTML specification描述了HTML的语法(请注意,还有旧版本的HTML,因此请务必根据编写HTML文档的版本进行解析)。该规范有一个非常有用的标题为Parsing HTML documents的部分,它与编写解析器非常相关。

解析HTML文档的结果应该是Document Object Model树。您可以遍历此树以查找您要查找的URL。

答案 1 :(得分:1)

所以使用好的标记语言阅读器(例如Boost Property Tree)总是比手动处理更合适。

但假设我们说你已经开发了一个用于解析的防弹正则表达式。因为我们不希望嫉妒来自其他受害者,他们试图通过正则表达式跨越标记语言处理的危险雷区;我们只是打电话给你的正则表达式:class OrganizationDetailComponent implements OnActivate { final Location _location; Organization organization = new Organization(); OrganizationDetailComponent( this._location); @override Future onActivate(routeStatePrevious, routeStateCurrent) async { if (routeStateCurrent.parameters.isNotEmpty) { var uuid = routeStateCurrent.parameters[AppRotas.organizationUuidParameter]; if (uuid != null && uuid.isNotEmpty) { organization = await _organizationService.getOrganizationById(uuid); } } } void goBack() { _location.back(); } } 我们会说它的1 st 捕获是你想要存储在这个{{1}中的网址regex re 1}}。

有了这样一个传奇的正则表达式,你唯一需要的是regex_token_iterator。鉴于流程输入是vector,您可以简单地执行此操作:

const sting text