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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1162閲覧

cssセレクターの変更にかかわらず情報を取得するセレクターの書き方について

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/03/23 14:49

https://news.goo.ne.jp/topstories/today/
のサイトの一番上のニュースのaタグのhref属性とaタグに囲われているテキストを取得しようと思っています。
グーグルクロームのcopy selectorを使ってみたところ

###該当のソースコード

#NR-main-in > section > article > article:nth-child(1) > div > div.gn-topics > h4 > a #NR-main-in > section > article > article:nth-child(3) > div > div.gn-topics > h4 > a #NR-main-in > section > article:nth-child(3) > div > div.gn-topics > h4 > a

0時の日をまたいだ時点で上記のようにセレクターが変わってしまうのでうまく取得ができません。
セレクターを何にすれば上記の変化にかかわらず取得ができるのでしょうか?
・・・ section >article:first-chils > div > ・・・
のようにしてもエラーが出てしまいました

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/23 14:54

RSSが提供されているというのに、スクレイピングしようとする意図はなんでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/23 15:45

練習でやっていました
退会済みユーザー

退会済みユーザー

2018/03/24 05:02

性格わる
guest

回答2

0

ベストアンサー

セレクタは併記できるので, ,で連結したらいかがでしょう?

CSS

1#NR-main-in > section > article > article:nth-child(1) > div > div.gn-topics > h4 > a, 2#NR-main-in > section > article > article:nth-child(3) > div > div.gn-topics > h4 > a, 3#NR-main-in > section > article:nth-child(3) > div > div.gn-topics > h4 > a

それですとpythonから呼んだ時にエラーになってしまうんですよね。

では, 途中のsectionarticle:nth-child(3)をすっ飛ばして記述したら如何でしょう.
>は直系の子セレクタですが, ですと子孫間のノード構成の違いを吸収できます.
(とは言え条件がだんだん緩やかとなるので, 余計なものまで釣ってしまう危険性が増えますが)

CSS

1#NR-main-in div > div.gn-topics > h4 > a

投稿2018/03/23 17:50

編集2018/03/23 18:03
defghi1977

総合スコア4756

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

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

退会済みユーザー

退会済みユーザー

2018/03/23 17:57

それですとpythonから呼んだ時にエラーになってしまうんですよね。 それぞれのサイトから一つのセレクターで呼び出すようにしていたので。 一つのセレクターで表すことはできないのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/23 18:09

飛ばしてしまうと二つ目以降の記事も全部取得してしまうんですよね。 最初の記事だけを取得できないのかなと試行錯誤しているのですが
defghi1977

2018/03/23 18:14

そこはスクリプトを使ってらっしゃるのだから, セレクタで抽出したノードのリストの先頭のみを使うとか, 個々のセレクタを実行し, 何も取れなかったら次のセレクタを試すとか, 手続き的なアプローチの出番では?
退会済みユーザー

退会済みユーザー

2018/03/24 03:12

すいません、おっしゃられていました通りのやり方でできました。ご回答ありがとうございます。
guest

0

サイトの構成が変わったら問題になるため、セレクターはフルパス指定をせずに取得対象の上位の要素から下に探索行けば良い気がしますが。

JavaScript

1let element = document.querySelector(".gn-topics"); 2let element = document.querySelector(".topics-title");

タグを見たら言語がPythonだった・・・

投稿2018/03/23 18:14

編集2018/03/23 18:18
umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問