web-dev-qa-db-ja.com

C ++用のhtmlパーサーのようなJsoup

Javaのいくつかのページからデータを取得するためにいくつかのコードを書いていますが、Jsoupは作業に最適なライブラリの1つでした。しかし、残念ながら、コード全体をC/C++に移植する必要があります。 。しかし、c ++で使用する適切なhtmlパーサーが見つかりません。C++用のライブラリのようなJsoupはありますか、または同様の結果をどのように達成できますか?

[現在、Curlを使用してページのソースを取得し、インターネットをローミングしてhtmlパーサーを見つけています]

16
Writwick

残念ながら、Jsoup for C++のようなパーサーはないと思います...

ここですでに説明したライブラリのほかに、C++(一部のCも)パーサーに関する概要がここにあります: 無料のCまたはC++ XMLパーサーライブラリ

解析には TinyXML-2 (Html-)DOM解析を使用しました。これは、ほとんどのOS(デスクトップ以外でも)で実行される非常に小さい(2ファイルのみ)ライブラリです。

LibXml

  • パーサーのプッシュとプル(DOM、SAX)
  • 検証
  • XPathおよびXPointerのサポート
  • クロスプラットフォーム/優れたドキュメント

Apache Xerxces

  • パーサーのプッシュとプル(DOM、SAX)
  • 検証
  • XPathサポートはありません(ただし、このためのパッケージですか?)
  • クロスプラットフォーム/優れたドキュメント

C++ CLIを使用している場合は、 NSoup -。NET用のJsoupポートを確認してください。

もう少し:

たぶん、DOMモデル/パーサーとCSSセレクターを一緒に組み合わせることができますか?

13
ollo

Qt Frameworkに精通している場合、最も便利な方法は QWebElement (参照 ここ )を使用することです。

それ以外の場合は、(別の投稿が示唆しているように) Tidy を使用してHTMLを有効なXMLに変換してから、 libxml ++ などのXMLパーサーを使用することをお勧めします。これらの2つのステップを示すサンプルコードを見つけることができます ここ

9
sgun

Chromiumにはオープンソースがあります パーサー 。また、 Google gumbo-parser かっこいいですね。

6
bowlofstew

はい、c ++用のhtmlパーサーライブラリがあります。チェックしてください https://github.com/HamedMasafi/HtmlParser/

このライブラリは、htmlまたはcssを解析し、ツリーモデルに変換できます。解析されたhtmlは、get_by_id、get_by_class_name、get_by_tag_nameなどのメソッドで検索できます。また、cssセレクター(タグ、ID、クラス、ネストされた子セレクターのみが現在サポートされています)を介して検索できる質問メソッドもあります。

子を見つけたら、その属性を変更できます。最終的には、コンパクトできれいなモードでhtmlをstd :: stringに出力できます。

1
Hamed Masafi

xerces2 をDOMパーサーとして使用できます。

または、 HTML Tidy を使用してHTMLをクリーンアップしてXHTMLに変換し、 pugixml または同様のXMLパーサーを使用してXMLを解析します。また、pugixmlは検証されていないパーサーであるため、最初にHTML Tidyを実行しなくても、生のHTMLで機能する可能性があります。

1
huysentruitw

C++からpython)を呼び出してもかまわない場合は、 Beautiful Soup を使用できます。少なくとも名前は正しいです!

真剣に-それは素晴らしい、ナンセンスなHTMLパーサーです。 C++からの呼び出しは試していませんが、は簡単なはずです。

1