私はNodeでWebスクレーパーを作成し、CheerioやJSDomのようなモジュールを使ってHTMLを解析して一連のURLのDOMにすることを検討しています。しかし、私は必要な特定の機能を持っています。NodeJSの値で要素のCSSセレクタを取得するにはどうすればよいですか?
私の目的は、いくつかの重要な情報のためにサイト上に複数の類似したページを掻き集めることができるスクレーパーを構築することです。しかし、私はこれらの情報を含むサンプルデータをいくつか持っており、それらを使ってそれらのページのモデルを動的に作成し、そのモデルを使用して残りのサイトを削っていきたいと考えています。明確にするために
、それぞれが異なる製品を含むサイト上の3つのページがある場合:
ページ1:
<html>
<body>
<h1>Product 1</h1>
<p>Desc</p>
<small>$2.05</small>
</body>
</html>
が2ページ:
<html>
<body>
<h1>Product 2</h1>
<p>Desc</p>
<small>$8.05</small>
</body>
</html>
ページ3:
<html>
<body>
<h1>Product 3</h1>
<p>Desc</p>
<small>$5.07</small>
</body>
</html>
Sa y私はすでに最初の製品のデータを持っています(私は製品名、Desc、および価格を知っています)。最初のページを使用してこれらの要素のセレクタを取得し、それらのセレクタを使用して他のページのデータをスクラップします。
DOM内にタグの内容がある場合、どのようにしてその要素のCSSセレクタを取得できますか?たとえば:
<html>
<body>
<h1>Hello world</h1>
</body>
</html>
は、どのように私は、「Hello World」のような文字列でチェリオ/ JSDomを提供し、それは要素が存在するDOMでのCSSセレクタを返すことができますか?
これを行う簡単な方法(別のフレームワークの使用を含む)がありますか、DOMオブジェクト全体をループして各要素の値を個別にチェックする唯一の方法ですか?
同じノードリストを返す複数の異なるXPathが存在します。あなたはどれが欲しいですか?私は '// * [text()= 'Hello world']'はあなたの後ろではないと思いますか? – OrangeDog
あなたは何を探したいですか?あなたはXPathを '// * [。 = "Hello world"] ' – skAstro
" hello world "を含む要素が存在する要素/パスを見つけるだけで、そのパスを使用して後で他の情報を抽出することができます。基本的には、シードデータを使用してスクレイピングモデルを自動的に構築しています。 –