質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.31%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

437閲覧

WEBサイトからランキング上位のURLとタイトルを取得したい

aft

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2023/09/29 14:05

実現したいこと

以下のURLから上位10件のリンクボールドテキストとタイトルを取得したい
https://www.dmm.co.jp/digital/videoa/-/list/=/sort=ranking/

前提

Javaで開発中なのですが、URLにアクセスはできるのですが、
どのCSSセレクタを指定すればリンクとタイトルを取得できるかわかりません。

発生している問題・エラーメッセージ

指定しているCSSセレクタが見つからないのでgetできず13行目でエラーとなります

該当のソースコード

Java

1 // ランキングページのURL 2 String rankingUrl = "https://www.dmm.co.jp/digital/videoa/-/list/=/sort=ranking"; 3 4 try { 5 // ランキングページを取得 6 Document doc = Jsoup.connect(rankingUrl).get(); 7 8 // 1位から10位までのURLを取得 9 Elements rankingItems = doc.select("CSSセレクタ"); // 仮のCSSセレクタを指定 10 11 for (int i = 0; i < 10; i++) { 12 StringBuilder text = new StringBuilder("ランキング上位の商品:\n"); 13 Element item = rankingItems.get(i); 14 String productUrl = item.select("CSSセレクタ").attr("href"); // 仮のCSSセレクタを指定 15 text.append(productUrl).append("\n"); 16 ・・・・ 17 } 18 19 } catch (Exception e) { 20 e.printStackTrace(); 21 }

試したこと

URLにアクセスしてWEBサイトでF12開発者ツールを開いて対象リンクのIDやクラスを設定してみました。
設定の仕方がわかっていないのでそこが原因だと思います。
デバッグでdocの中を見てもどれか不明でした。

補足情報(FW/ツールのバージョンなど)

なし

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

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

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

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

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

guest

回答2

0

html をテキストエディタででも読めば、ランキングデータの(欲しい情報が入っている) a タグには特定の属性があることが分かります。
後は jsoup の API をどう使用するかですから、見るべきは API のドキュメントで、開発者ツールとかデバッガとかは必要無いでしょう。

java

1import org.jsoup.Jsoup; 2import org.jsoup.nodes.Document; 3import org.jsoup.nodes.Element; 4import org.jsoup.select.Elements; 5 6public class Ranking { 7 public static void main(String[] args) throws Exception { 8 Document doc = Jsoup.parse( 9 "<a href='https://example.com/00100' data-i3ref='list' data-listorder='1' onmousedown=\"\">\n" 10 + "<span class=\"img\">\n" 11 + "<img src=\"https://example.com/image00100.jpg\" alt=\"title 00100\">\n" 12 + "</span>\n" 13 + "<span class=\"txt\">title 00100</span>\n" 14 + "</a>" 15 + "<a href='https://example.com/00120' data-i3ref='list' data-listorder='2' onmousedown=\"\">\n" 16 + "<span class=\"img\">\n" 17 + "<img src=\"https://example.com/image00120.jpg\" alt=\"title 00120\">\n" 18 + "</span>\n" 19 + "<span class=\"txt\">title 00120</span>\n" 20 + "</a>" 21 ); 22 23 Elements elements = doc.select("a[data-listorder]"); 24 for(int i=0; i<Math.min(10, elements.size()); i++) { 25 Element element = elements.get(i); 26 System.out.println("order=" + element.attr("data-listorder")); 27 System.out.println("href=" + element.attr("href")); 28 System.out.println("title=" + element.text()); 29 } 30 } 31}
order=1 href=https://example.com/00100 title=title 00100 order=2 href=https://example.com/00120 title=title 00120

投稿2023/09/30 06:52

編集2023/09/30 07:06
jimbe

総合スコア13327

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

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

0

ベストアンサー

回答

9行目を以下のとおりに変更すると、10位までのa要素が取得できます。

java

1Elements rankingItems = doc.select("CSSセレクタ"); 2// ↓ 3Elements rankingItems = doc.select("#list > li:nth-child(-n+10) a[data-i3ref]");

すると14行目のitemは、それ自身がa要素であるため、以下のコードでhref属性の文字列を取得できます。

java

1String productUrl = item.select("CSSセレクタ").attr("href"); 2// ↓ 3String productUrl = item.attr("href");

タイトルを取得するには、itemに対してさらにselectを使用します。

java

1String title = item.select(".txt").text();

補足

まずは下記のURLから、CSSセレクターについて勉強しましょう。
https://developer.mozilla.org/ja/docs/Web/CSS/CSS_selectors

例えば、#list > li:nth-child(-n+10)は、id="list"の要素の子要素のうち、先頭から10番目までのliという意味になります。nth-childnth-of-typeとの違いなど、気をつけるべき点もあります。

投稿2023/09/30 05:24

編集2023/09/30 07:10
_peanuts_

総合スコア130

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

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

aft

2023/10/01 14:13

ありがとうございます。無事にデータが取れました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問