🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

2958閲覧

puppeteerで自分自身を示すセレクタを使いたい

shiro09

総合スコア19

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/11/29 17:35

以下のようなhtmlを対象としてpuppeteerでスクレイピングをするとします。

<div class="item" id="row1"></div> <div class="item" id="row2"></div> <div class="item" id="row3"></div> <div class="item" id="row4"></div>

まず、以下のようにdivを取り出します

let list = await page.$$('div.item');

ここまでは前提として必須です。
その上でlistを回しつつdivからIDを取り出したい時以下のようになるかと思います。

for (div of list) { console.log(await div.$eval('[selector]', item => item.id)); }

子要素であれば[selector]の部分にシンプルに子要素のセレクタを入れれば良いのですが上記のように自分自身が対象の場合、[selector]にどのような指定をすれば良いでしょうか。

ちなみに上記でidを取得するには例えば以下のようにすれば可能です。

for (div of list) { console.log(await (await div.getProperty('id')).jsonValue()); }

他にも最初にdiv配列を取得する際にidを取るなど方法は有ります。が、あくまで「自分自身を示すセレクタ」が存在するのかが知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

elementHandle.evaluate使って、

JavaScript

1for (div of list) { 2 console.log(await div.evaluate(item => item.id)); 3}

と書けば済むと思うのですが、
なぜあくまで、

JavaScript

1for (div of list) { 2 console.log(await div.$eval('自分自身を表すセレクター', item => item.id)); 3}

にこだわられるのでしょうか?
ご質問あくまで「自分自身を示すセレクタ」が存在するのかが知りたいに答えますと、知りません。ないんじゃないでしょうか?

投稿2019/11/30 01:47

shinji709

総合スコア805

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiro09

2019/11/30 02:24

何故か、というご質問であれば申し訳有りませんが具体的には申し上げられません。 質問でも重要視して書いたつもりなのですが、具体的な利用シーンを挙げると「そこは(自身のセレクタでなくとも)こういう方法で出来ますよ」というご回答を頂いてしまう懸念があるからです。 ちなみにご提示頂いたソースのevaluateはこのままだと動かないかと思うのですがいかがでしょうか。
shinji709

2019/11/30 02:49

手元では動きますね。node12.2.0とpuppeteer2.0.0で動作確認してます。まあご要望にそぐわなかった意味のないコードですが。 ちなみに他の方の回答などで、「自分自身を示すセレクタ」が存在しない、と分かったらどうするんですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問