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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

selenium

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

Q&A

0回答

970閲覧

seleniumで取得したhtmlをBeautifulSoupに渡す時に情報が抜け落ちてしまう

yuchikawa

総合スコア0

Beautiful Soup

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

selenium

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

0グッド

1クリップ

投稿2021/04/16 02:15

編集2021/04/19 03:36

前提・実現したいこと

自動車のグレード検索サイトから、グレード情報を抽出したいです。
そのために、Selenium、BeautifulSoupを使用しています。
1.Seleniumでサイトアクセス&グレード検索を行い、検索結果ページのhtml取得
2.取得したhtmlをBeautifulSoupに渡す
3.BeautifulSoupのメソッドを駆使し欲しい情報を取得

OS: MacOS Big Sur / Ver. 11.2.3 (M1)
言語: Python 3.6
利用ブラウザ:GoogleChrome
コーディングツール:jupyter notebook

発生している問題

三菱自動車のサイトのみ以下問題が発生しています。
(TOYOTAやHONDAなど他サイトでも同じコーディングですが、
同様の事象は発生していません。)

seleniumのドライバーにて取得したhtmlをBeautifulSoupに渡す際に
情報が抜け落ちている。

※Body以下
【BeautifulSoupに渡す前(= seleniumで取得)のhtml】

html

1 2<body style="color: #000000">\n 3 <form method="POST" name="frmIN" action="GradeSearch.do">\n\n\n 4 <div id="headerpop">\n\t 5 <div class="headerpopArea">\n\t\n\t\t 6 <div class="left">\n\t\t\t 7 <div class="inner">\n\t\t\t\t 8 <p><img src="share/images/header_logo_01.gif" alt="MITSUBISHI MOTORS" title="MITSUBISHI MOTORS \xe3\x83\x88\xe3\x83\x83\xe3\x83\x97\xe3\x83\x9a\xef\xbd\xb0\xe3\x82\xb8\xe3\x81\xb8" width="93" height="63" /></p>\n\t\t\t</div>\n\t\t</div>\n\t\n\n\t\n\t 9 <div class="right">\n\t\t 10 <div class="inner"> <a href="#" onclick="window.close()" onkeypress="window.close()"><img src="share/images/cmn_im_03.gif" alt="" width="14" height="10" />\xe9\x96\x89\xe3\x81\x98\xe3\x82\x8b</a></div>\n\t\t</div>\n\t\n\t</div>\n</div>\n\n\n 11 <div class="popupcontents">\n 12 <p class="headtitle"><span style="font-size: 16px;"><strong></strong></span></p>\n 13 <div id="messagetxt"></div>\n 14 <script type="text/javascript"> 15 \n;\n 16 </script>\n 17 <p></p>\n 18 <div class="leftside">\n 19 <table cellspacing="0" class="syadai1">\n 20 <caption>\n\n</caption>\n 21 <tbody> 22 <tr>\n 23 <th class="rate35"></th>\n 24 <td class="rate65"></td>\n</tr>\n 25 <tr>\n 26 <th></th>\n 27 <td></td>\n</tr>\n 28 <tr>\n 29 <th><strong><font color="red"></font></strong></th>\n 30 <td> </td>\n</tr>\n 31 <tr>\n 32 <th></th>\n 33 <td>B11WLTMX </td>\n</tr>\n</tbody> 34 </table>\n</div>\n 35 <div class="rightside">\n 36 <table cellspacing="0" class="syadai1">\n 37 <caption>\n\n</caption>\n 38 <tbody> 39 <tr>\n 40 <th class="rate35">\xe9\xa7\x86\xe5\x8b\x95</th>\n 41 <td class="rate65">2WD</td>\n</tr>\n 42 <tr>\n 43 <th></th>\n 44 <td>CVT</td>\n</tr>\n 45 <tr>\n 46 <th>\xe7\x87\x83\xe6\x96\x99</th>\n 47 <td>\n</tr>\n</tbody> 48 </table>\n</div>\n 49 <div class="leftside2">\n 50 <div class="mgnb20">000</div>\n 51 <div class="mgnb20">\n 52 <table cellspacing="0">\n 53 <tbody> 54 <tr>\n 55 <td>\xe6\xb3\xa81\xef\xbc\x89</td> 56 <td></td>\n</tr>\n 57 <tr>\n 58 <td></td> 59 <td></td>\n</tr>\n 60 <tr>\n 61 <td>\xe6\xb3\xa82\xef\xbc\x89</td> 62 <td></td>\n</tr>\n 63 <tr>\n 64 <td></td> 65 <td></td>\n</tr>\n 66 <tr>\n 67 <td></td> 68 <td></td>\n</tr>\n 69 <tr>\n 70 <td></td> 71 <td></td>\n</tr>\n</tbody> 72 </table>\n\n</div>\n 73 <p class="alignright"> 74 <a href="GradeSearch.do" class="toback"> 75 <font size="2">\xe6\x88\xbb\xe3\x82\x8b</font> 76 </a> 77 </p>\n</div>\n</div>\n</form>\n\n 78 <div id="footerpop">\n 79 <div class="copyrightArea">\n 80 <p>\xc2\xa9 Mitsubishi Motors Corporation. All rights reserved.</p>\n</div>\n</div>\n 81 <!-- end footer -->\n 82 <!-- forlog -->\n 83 <script type="text/javascript"> 84 _satellite.pageBottom(); 85 </script>\n\n\n</body> 86</html>

【BeautifulSoupに渡した後のhtml】

html

1<body style="color: #000000"> 2 <form action="GradeSearch.do" method="POST" name="frmIN"> 3 <div id="headerpop"> 4 <div class="headerpopArea"> 5 <div class="left"> 6 <div class="inner"> 7 <p></p> 8 </div> 9 </div> 10 </div> 11 </div> 12 </form> 13</body> 14</html>

該当のソースコード

※グレード検索に使用する車台番号が個人情報にあたるため、マスキングしています

Python

1import time 2import chromedriver_binary 3from selenium import webdriver 4from selenium.webdriver import Chrome, ChromeOptions, Remote 5from selenium.webdriver.common.keys import Keys 6from bs4 import BeautifulSoup 7import pandas as pd 8chassis_num1 = "XXXXXX" 9chassis_num2 = "XXXXXX" 10 11url = "https://www.mitsubishi-motors.co.jp/reference/gradesearch.html" 12options = ChromeOptions() 13driver = Chrome(options=options) 14 15# ページにアクセス 16driver.get(url) 17 18# 同意画面 19driver.find_element_by_class_name("mod-link-01__contents").click() 20#検索画面 21chassisNum_input1 = driver.find_element_by_name("CNO1") 22chassisNum_input1.send_keys(chassis_num1) 23chassisNum_input2 = driver.find_element_by_name("CNO2") 24chassisNum_input2.send_keys(chassis_num2) 25# # -- 検索ボタンをクリック 26driver.find_element_by_id("kensaku").click() 27 28html = driver.page_source.encode('utf-8') 29soup = BeautifulSoup(html, 'lxml')

この「html」には欲しいグレードの情報を含んだhtmlが入っているのですが、
「soup」に渡すとごっそりなくなってしまいます。(jupyter notebookにて、変数「html」「soup」を確認済み)

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

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

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

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

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

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

otn

2021/04/16 15:18

【BeautifulSoupに渡す前(= seleniumで取得)のhtml】 【BeautifulSoupに渡した後のhtml】 をそれぞれ、どうやって確認したのでしょうか? そもそも、なぜSeleniumで完結して処理せず、BeautifulSoupを併用するのでしょう?
yuchikawa

2021/04/19 00:55

otnさん 質問いただきありがとうございます。回答します。 >【BeautifulSoupに渡す前(= seleniumで取得)のhtml】 >【BeautifulSoupに渡した後のhtml】 >をそれぞれ、どうやって確認したのでしょうか? →「該当のソースコード」欄の最後の2行の変数で確認しております。(html,soup) >そもそも、なぜSeleniumで完結して処理せず、BeautifulSoupを併用するのでしょう? →作業依頼主の指示であったためです。Seleniumはブラウザテスト用のブラウザであるため、情報取得はBeautifulSoupで実装して欲しいとのことでした。 仮に、「BeautifulSoupでは実現不可」ということであればSeleniumで実装する他ないと思いますが、その判断ができていないため、助言を求めている次第です。
otn

2021/04/19 02:16

> →「該当のソースコード」欄の最後の2行の変数で確認しております。(html,soup) 具体的なコードは?
yuchikawa

2021/04/19 02:41

>> →「該当のソースコード」欄の最後の2行の変数で確認しております。(html,soup) >具体的なコードは? それぞれの変数を打っただけです。 html = driver.page_source.encode('utf-8') soup = BeautifulSoup(html, 'lxml') の後に、 html soup とそれぞれ打って、中身を表示させました。
otn

2021/04/19 03:00

打ったと言うことは、何らかのツール経由ですか? 「プログラムをファイルに保存して、"python ファイル名"で実行した」 という通常以外の実行方法であれば、環境をちゃんと書きましょう。
yuchikawa

2021/04/19 03:37

otnさん ご指摘ありがとうございます。 jupyter notebookを使用しており、その旨追加しました。
otn

2021/04/19 07:49

特殊な実行方法で、プログラムからは考えにくい現象が出た時は、切り分けのために、通常の方法で実行してみましょう。 プログラムをファイルに書いて、"python ファイル名"で実行します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問