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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

5185閲覧

seleniumでページ遷移後の要素取得がしたい

YummyD

総合スコア5

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2020/04/28 09:35

編集2020/04/29 13:14

seleniumでページ遷移後の要素取得がしたい

Python3で使用環境はMac,テキストエディタはAtomです
遷移前のページ
遷移後のページ

発生している問題

ページ遷移した後の要素を取得できない

### 該当のソースコード #! python3.8 import urllib.request,urllib.error import bs4 import openpyxl from selenium import webdriver from time import sleep from openpyxl.styles import Alignment #Webページに遷移 print('GooGling...') driver = webdriver.Firefox(executable_path='/Users/katsuhisaoikawa/opt/anaconda3/bin/geckodriver') url = 'http://ssd.cswiki.jp/index.php?%E6%AD%B4%E5%8F%B2%EF%BC%A1%E3%83%A9%E3%83%B3%E3%82%AF' driver.get(url) sleep(5) #ページ内のキーワードを示すHTMLを取得 soup1 = bs4.BeautifulSoup(driver.page_source, 'html.parser') titles = [] for title in soup1.select('p a'): titles.append(title.getText()) #キーワードの説明のページに遷移しHTMLを取得 ##キーワードのリンクのURLを取得 explain_urls = [] elems_explain_url = driver.find_elements_by_css_selector('#body p a') for elem_explain_url in elems_explain_url: explain_url = elem_explain_url.get_attribute('href') explain_urls.append(explain_url) ##取得したリンクに遷移し、そのページのHTMLを取得 explanations = [] related_terms = [] elems_explanation = driver.find_elements_by_css_selector('#body') elems_related_term = driver.find_elements_by_css_selector('#body') for explain_url_list in explain_urls: driver.get(explain_url_list) sleep(30) for elem_explanation in elems_explanation: explanation = elem_explanation.get_attribute('p') explanations.append(explanation) for elem_related_term in elems_related_term: related_term = elem_related_term.get_attribute('a') related_terms.append(related_term) driver.back()

Python3 Atomにて編集

試したこと

ページの読み込みが終わる前に取得し始めたのかと思い、
sleep(10)からsleep(30)に変更したが変わらず変化なし。

補足情報

取得後の結果をExcelに出力することが最終的な目的です。
現状、出力すると以下のようになります。
出力結果

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

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

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

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

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

guest

回答1

0

ベストアンサー

soup2は遷移前のページ(driver.get(url)の結果)ですよ。

頭の中が混乱しているようなので、bs4を使わずにseleniumだけ使うことにして、書き直しましょう。

投稿2020/04/28 13:20

otn

総合スコア85901

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

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

YummyD

2020/04/28 14:10

soup2 = bs4.BeautifulSoup(driver.page_source, 'html.parser') soup3 = bs4.BeautifulSoup(driver.page_source, 'html.parser') の部分をbs4を使わずにseleniumだけで同じ動作をさせるにはどのようにしたらいいでしょうか。
otn

2020/04/28 14:21

これは不要です。
YummyD

2020/04/28 16:43

そうすると、 for explanation in soup2.select('#body p'): explanations.append(explanation.getText()) for related_term in soup3.select('#body a'): related_terms.append(related_term.getText()) の部分が動作しないと思うんですが、代わりに何を用いればいいのでしょうか。
otn

2020/04/29 02:37

> elems_explain_url = driver.find_elements_by_css_selector('#body p a') と同様に。
YummyD

2020/05/02 16:12

解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問