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

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

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

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

Python 3.x

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

Python

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

selenium

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

Q&A

解決済

1回答

7809閲覧

pythonでページ内<script></script>内の情報を取得

pasomtr

総合スコア20

Beautiful Soup

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

Python 3.x

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

Python

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

selenium

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

0グッド

0クリップ

投稿2019/12/22 10:48

今回、WEBスクレイピングでつまずきました。
スクレイピング初心者ですので、お手柔らかにご指南頂けますと幸いです。

行いたい内容

WEBページのソースコード内でインラインで記述されている<script></script>の内の特定の変数の中身を取得する。

前提

・インラインで記述されている<script>は複数ある。
<script>内は、たぶんJAVAで記述されている。

参考にしているURL

https://aga-note.com/python-scraping-not-html/#i
↑これでは、javasqriptのでつまずきました。
スクレイピング初心者ですので、お手柔らかにご指南頂けますと幸いです。

行いたい内容

大枠:WEBページのソースコード内でインラインで記述されている<script></script>の内の特定の変数の中身を取得する。

詳細:以下の”取得したいコード元”内の
["https://hogehoge.com/hogehoge.jpg","https://hogehoge.com/hogehoge1.jpg","https://hogehoge.com/hogehoge2.jpg","https://hogehoge.com/hogehoge3.jpg","https://hogehoge.com/hogehoge4.jpg","https://hogehoge.com/hogehoge5.jpg"],

https://hogehoge.com/hogehoge.jpg
https://hogehoge.com/hogehoge1.jpg
https://hogehoge.com/hogehoge2.jpg
https://hogehoge.com/hogehoge3.jpg
https://hogehoge.com/hogehoge4.jpg
https://hogehoge.com/hogehoge5.jpg
として取得したい

前提

・インラインで記述されている<script>複数ある
・該当箇所の<script>内は、たぶんJAVAで記述されている。
<script>内には他にも変数がある。

参考にしているURL

https://aga-note.com/python-scraping-not-html/#i
↑しかし、これではjavasqriptでもちゃんと挙動しなかったので、ほとんど無視してます。

取得したいコード 元

html

1<script> 2 window.runParams = { 3 data: { 4 "imageModule":{"features":{},"i18nMap":{},"id":0,"imagePathList":["https://hogehoge.com/hogehoge.jpg","https://hogehoge.com/hogehoge1.jpg","https://hogehoge.com/hogehoge2.jpg","https://hogehoge.com/hogehoge3.jpg","https://hogehoge.com/hogehoge4.jpg","https://hogehoge.com/hogehoge5.jpg"],"name":"ImageModule","summImagePathList":["https://hogehoge.com/hogehoge.jpg_50x50.jpg","https://hogehoge.com/hogehoge1.jpg_50x50.jpg","https://hogehoge.com/hogehoge2.jpg_50x50.jpg","https://hogehoge.com/hogehoge3.jpg_50x50.jpg","https://hogehoge4.com/hogehoge4.jpg_50x50.jpg","https://hogehoge.com/hogehoge5.jpg_50x50.jpg"]}, 5 } 6</script>

###現在試しているコード

Python

1from selenium import webdriver 2from bs4 import BeautifulSoup 3import time 4 5driver = webdriver.Chrome ( executable_path=r'C:\chromedriver.exe' ) 6driver.get ( 7 "https://hogehoge.com/) 8 9html = driver.page_source 10 11bs = BeautifulSoup ( html, "html.parser" ) 12time.sleep ( 5 ) 13 14for script_ele in bs.find_all ( "script" ): 15 16 print (script_ele.prettify ())

です。
for script_ele in bs.find_all ( "script" ):以降をいろいろ試したのですが、
わかりませんでした。

どのようにすれば、取得出来るのでしょうか。。。

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

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

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

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

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

meg_

2019/12/22 10:54

「bs.find_all ( "script" )」で何が取得できていますか?
pasomtr

2019/12/22 10:56

ページ内の<script></script>の情報全てが取得されます。
pasomtr
meg_

2019/12/22 11:05

情報は文字列として取得出来ているのでしょうか? そうであれば、そこから必要な情報を検索して取得出来ないでしょうか?
pasomtr
meg_

2019/12/22 12:11

i番目の<script>要素のテキストなら、bs.find_all ( "script" )[i].textで<script>XXX</scrip>のXXX部分が文字列として取得できるかと思います。
pasomtr

2019/12/22 13:27

ありがとうございます。 ご指南頂きました様にすると、 Traceback (most recent call last): File "<input>", line 13, in <module> IndexError: list index out of rangeとしてエラーが出ました。。 実際、該当箇所の<script>内には、かなりの量の文字列が含まれています。。 改善したコードは以下です。 ```Python from selenium import webdriver from bs4 import BeautifulSoup import time driver = webdriver.Chrome ( executable_path=r'C:\chromedriver.exe' ) driver.get ( "https://hogehoge.com/" ) html = driver.page_source bs = BeautifulSoup ( html, "html.parser" ) time.sleep ( 5 ) i = 44 for script_ele in bs.find_all ( "script" )[i].text: break print ( script_ele ) ``` 今、Traceback (most recent call last): File "<input>", line 13, in <module> IndexError: list index out of rangeのエラーに関しては調べていますが、もしお手数でなければご教授頂けますと幸いです。
meg_

2019/12/22 13:35

len(bs.find_all("script"))とするとそのページ内の<script>のタグ数が分かります。ちなみにPythonのインデックスは0から始まります。
pasomtr

2019/12/22 16:39

ありがとうございます。 i = 19 for script_ele in bs.find_all ( "script" )[i].text: にすると、TypeError: 'int' object is not subscriptableのエラーが返されました。。。 どうしてなのでしょうか intの知識が不足していますが、 []でも()でもなく、i = 19 なので条件はクリアしてるかと思うのですが、、、
meg_

2019/12/23 00:48

そのfor文の中で使いたいなら、下記のようになるでしょう。 for script_ele in bs.find_all("script"): print(script_ele.text)
guest

回答1

0

ベストアンサー

さしあたって、scriptの内容からhttp~を抜くだけなら以下でどうでしょうか。

python

1from bs4 import BeautifulSoup 2import time 3 4html = """<script> 5 window.runParams = { 6 data: { 7 "imageModule":{"features":{},"i18nMap":{},"id":0,"imagePathList":["https://hogehoge.com/hogehoge.jpg","https://hogehoge.com/hogehoge1.jpg","https://hogehoge.com/hogehoge2.jpg","https://hogehoge.com/hogehoge3.jpg","https://hogehoge.com/hogehoge4.jpg","https://hogehoge.com/hogehoge5.jpg"],"name":"ImageModule","summImagePathList":["https://hogehoge.com/hogehoge.jpg_50x50.jpg","https://hogehoge.com/hogehoge1.jpg_50x50.jpg","https://hogehoge.com/hogehoge2.jpg_50x50.jpg","https://hogehoge.com/hogehoge3.jpg_50x50.jpg","https://hogehoge4.com/hogehoge4.jpg_50x50.jpg","https://hogehoge.com/hogehoge5.jpg_50x50.jpg"]}, 8 } 9</script>""" 10 11bs = BeautifulSoup ( html, "html.parser" ) 12time.sleep ( 5 ) 13for script_ele in bs.find_all ( "script" ): 14 text_list = str(script_ele).split("\"") # 引用符「"」で分割 15 for url in text_list: 16 if url.startswith("http"): 17 print (url)

投稿2019/12/23 04:16

jeanbiego

総合スコア3966

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

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

pasomtr

2019/12/23 07:01

正に行いたい処理の内容です!!! ありがとうございます! 頂いたコードを基に勉強を続けてまいります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問