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

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

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

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

Beautiful Soup

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

Python 3.x

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

selenium

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1903閲覧

Beautiful Soupで取得したhtmlのbodyに何も入っていない

Murasaki_PurPle

総合スコア37

スクレイピング

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

Beautiful Soup

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

Python 3.x

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

selenium

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/02/07 13:54

編集2021/02/07 13:56

楽天証券のサイトに自動で入って、保有資産実績が書かれたcsvを定期取得したい

こんばんは。
現在つみたてNISAとiDecoを開始し、保有資産の実績を自動で取得してデータ分析に活かしたいと考えています。
そのため、SeleniumとBeautifulSoupを使って自動でcsvを取ってくるところまで行いたいと考えています。

ところが、BeautifulSoupで取得したhtmlの<body>に何も入っておらず、指定した場所をクリックできなくなってしまいました。

スクリプト

楽天証券のサイトに自動で入り、入ったサイトのURLを取得して その中の<img>タグをクリックしたいです。
以下のようなスクリプトを書きました。

Python

1from selenium import webdriver as WD 2from time import sleep 3from bs4 import BeautifulSoup as bs 4import requests as rq 5 6browser = WD.Chrome() 7url = "https://www.rakuten-sec.co.jp" 8browser.get(url) 9 10 11element1 = browser.find_element_by_id("form-login-id") 12element2 = browser.find_element_by_id("form-login-pass") 13element3 = browser.find_element_by_class_name("s3-form-login__btn") 14 15element1.send_keys("xxxxx") 16element2.send_keys("xxxxx") 17element3.click() 18 19currentUrl = browser.current_url 20 21print(currentUrl) 22 23rq = rq.get(currentUrl) 24soup = bs(rq.text, "html.parser") 25print(soup) 26imgs = soup.find_all("img") 27print(imgs) 28 29#browser.quit()

上記のprint(soup)でhtmlが取得できますが、その中身は以下の通りでした。

html

1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 3<html> 4<script language="javascript"> 5<!-- 6 // 自動ログアウト制御用のクッキーキーを削除 7 var lDate = new Date(); 8 lDate.setTime(0); 9 document.cookie = "alo=;expires="+lDate.toGMTString(); 10 11 window.top.location.replace("https://www.rakuten-sec.co.jp/session_error.html"); 12 13//--> 14</script> 15<body> 16 17 18 19 20 21 22</body> 23</html>

中身が空っぽなので、<img>を取得しようにもできませんでした。

疑問点

  1. なぜbodyの中身が取れていないのかわからない
  2. どのようにすればbodyの中身が取れるか教えて欲しい

いつもありがとうございます

今日、YouTubeの2時間くらいの講座を受講して覚えた程度の実力です。
そのためまだ実力としては下位レベルで、もしかしたら意味不明な質問をしているかもしれません。

私は完全独学を貫いていますが、それができるのは皆様のおかげです。
どうか、お力添えをお願いいたします。

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

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

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

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

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

meg_

2021/02/07 14:11

https://corp.rakuten.co.jp/copyright/ に下記記述がありますので、スクレイピングは禁止のようです。 > 著作権等、当社データの保護について 楽天グループ(以下当社)のサービスを通じて提供される全てのコンテンツ(画像、文字、ロゴ、アイコン、動画、音声、アカウント情報、製品リスト、型番、解説、価格、その他のデータを含む全てのもの)及びその編集物は、当社または当社にその利用を許諾した権利者の財産です。これらは各国の著作権法及びその他の知的財産に関する法令によって保護され、また例え著作権法及びその他の知的財産に関する法令により保護されないものであっても、当社の営業活動上の利益に寄与する一切のものについては、当社が法令上の権利を有します。 当社は当社による明示的な許諾がない限り、当社のサービスを通じて提供される全てのコンテンツ及びその編集物について、第三者による複製等一切の利用及び、クローラーなどのデータ収集・抽出ツールの使用、データマイニング等の行為を禁止致します。
guest

回答1

0

ベストアンサー

Seleniumを使っているのに、なんでまたrequestsbs4とかしているんでしょう?
Seleniumで完結すれば解決すると思います。

投稿2021/02/07 14:10

otn

総合スコア85888

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

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

Murasaki_PurPle

2021/02/20 05:50

otn様 回答ありがとうございます。 確かにSeleniumだけで作れば問題なかったです。無事動作いたしました。 追加の質問で恐縮なのですが、ご教示いただけないでしょうか。 BeautifulSoupでwebページのbody部分を取得できなかった理由がいまだに分かっておりません。なぜこのような事象が発生したのでしょうか。
otn

2021/02/20 12:32

そもそもBeautifulSoupでwebページを取得してるわけじゃないですよ。 ページの取得は、rq = rq.get(currentUrl) ですね。 JavaScriptで要素を追加する前なのでしょう。
Murasaki_PurPle

2021/02/20 12:49

>JavaScriptで要素を追加する前なのでしょう。 なるほど。そういうことだったのですね! 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問