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

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

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

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

selenium

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

Q&A

解決済

3回答

835閲覧

seleniumを使ったダウンロードについて

fu_3823

総合スコア81

Python

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

selenium

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

0グッド

0クリップ

投稿2020/03/31 20:21

seleniumでHTMLの要素をダウンロードしようとサンプルとしてコード書きました。

Python

1from selenium import webdriver 2driver = webdriver.Chrome("ドライバのパス") 3driver.implicitly_wait(100) 4driver.get("https://www.yahoo.co.jp/")

最後の一行ですが、ここを
data = driver.get("https://www.yahoo.co.jp/")
このようにしたいのですが
tupe(data)=NoneTypeになります。
挙動としては、driverにブラウザごと格納されたような格好になっているようなのですが、この挙動がきちんと理解できません。
やりたいことは、一旦サイト全体をHTMLとして変数に格納するということです。他のクローラーのように、一旦HTMLで変数に格納してから、スクレイピングのコードの練習をしようと思いました。
driver.htmlとしても、その属性はないようです。
type(driver)=selenium.webdriver.chrome.webdriver.WebDriver
となります。

そもそも、
data = driver.get("https://www.yahoo.co.jp/")
こんなことをするのは、作法として間違っているのでしょうか。このあたりの挙動とともに教えて頂けたら幸いです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

作法として間違っているのでしょうか。

間違っています。
driver.getは指定されたページに遷移するだけの関数で、
結果として何か値を返すわけではありません。

ざっくり言うとdriverという変数にデータとして
指定されたページの情報が格納されているイメージです。

それを使って何かをやりたいなら=で値を受け取るのではなくて
driverそのものをいじってやってください。

一旦HTMLで変数に格納してから、スクレイピングのコードの練習をしようと思いました。

「DOM情報を変数に格納した後、オフライン状態にして、色々といじって挙動を確かめようとした」
という推理で正しいでしょうか。

そんなことはできません。
現在のDOMがどうなっているかを文字列で取得することだけはできます。

python

1page_no_html = driver.page_source 2print(type(page_no_html)) 3print(page_no_html)

ただし、page_no_htmlは文字列型の変数であり、webdriver型の変数ではないので、
page_no_html.get_element_by_id('hoge')などはできません。


後全然別件ですが、yahooのDOMはめちゃくちゃ複雑なので、
スクレイピング難易度が非常に高いです。

練習をするなら如何にも10年近く更新されてなさそうな古臭いサイトなどで試してください。
余計なJSエラーなどにも悩まされずに済むと思います。
もちろんスクレイピングを禁止していないか規約を確認してください。

投稿2020/04/02 14:27

shirai

総合スコア1290

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

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

fu_3823

2020/04/02 14:51

ありがとうございます。実は、あるサイトからtableを取得するのが、seleniumを利用した目的でした。 適当なサイトで練習をしながらコードを書いているのですが、うまくいきません。改めて質問させて頂きます。
guest

0

そもそも、
data = driver.get("https://www.yahoo.co.jp/")
こんなことをするのは、作法として間違っているのでしょうか。

間違っていません。これはyahoo.co.jpのサイトをURL欄に入力すると考えていたらければいいと思います。
CHERRYさんが言っているように

python

1source = driver.page_source

とやれば入手できると思います。

また、回答には関係ないですが、以下のようなサイトがあるので見てみたらいかがでしょうか。
https://www.seleniumqref.com/api/webdriver_abc_python.html

投稿2020/04/01 00:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

まずは、マニュアルを読みましょう。

Selenium with Python

そうすれば、page_source が見つかります。

Gets the source of the current page.

投稿2020/03/31 21:36

CHERRY

総合スコア25171

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問