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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

2回答

1329閲覧

WEBスクレイピングにおいてページ上のソースコードと取得したコードが異なり取りたい情報が取れない

tajas

総合スコア5

スクレイピング

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2021/09/15 01:15

Pythonを用いたスクレイピングに関する問題です。

前提・実現したいこと

https://www.sakenomy.jp/search/sake/result/?t=sake&p=1
上記のサイトにおける各日本酒のリンク(href=~~)を取得したいと考えています。
使用言語はPythonです。

発生している問題・エラーメッセージ

urllibでは404エラーを吐きそもそもコード取得が出来ない

beautifulsoupなら取得できるようだ→できた

<a aria-label="詳細へ遷移" href="/sake/TST0000047606/"><div class="item_image-container__-Xn8h" style="height: 184px; width: 184px;"><img src="https://img.sakenomy.jp/thumbnail_small/wholeImage/K01N019003_20210906052524.jpg" alt="" class="item_item-image__3TJuB" height="184" width="184"></div></a>
ページ上ではこの部分が取得したい情報っぽいのでseleniumのfind_element_by_class_nameで取得しようとするができない。取得コードを見てみるとページ上のものと明らかに異なるので原因追求

どうやらjavascriptが使われていると表示上と取得コードが異なるようだ

seleniumで取得したソースコードをbeautifulsoupに渡せばjavascript実行後のソースコードを取得できるようだ。

それでも欲しい情報を取ることができず途方に暮れる←今ここ

該当のソースコード

from bs4 import BeautifulSoup
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.sakenomy.jp/search/sake/result/?t=sake&p=1')
soup = BeautifulSoup(browser.page_source, 'html.parser')
soup.find_all('img')
↑日本酒の画像がページ上に20枚表示されているのでその分の情報が出るはずだと思ったが出ない。

試したこと

発生している問題のところに記載させていただいたため省略

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

web frameworkとしてBootstrap
CIシステムとしてwebpackというツールが当該ページ上で使われているようで、それが原因か?とも思ったのですがそこは調べても同様の困りごとに当たっている方が見つかりませんでした。

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

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

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

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

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

AbeTakashi

2021/09/15 01:44

具体的なサイトのスクレイピング行為に関しての質問は、そのサイトの利用規約と照らし合わせて、スクレイピング行為が許されているかどうかをしっかりと明記した方が良いと思います。それが無理なら具体的なサイト名を出さない方がいいでしょう(スクレイピングに関する一般的な質問の形にするのがいいです)。 参考) https://qiita.com/nezuq/items/3cc9772118ad112c18dc https://qiita.com/nezuq/items/c5e827e1827e7cb29011
guest

回答2

0

SeleniumにもHTMLを解析して要素を取得する機能はあるので、普通はBeautifulsoupは不要で、Seleniumで完結できます。SeleniumのHTML解析機能で不足する場合はBeautifulsoupと併用するなど。

今回はおそらく、JavaScriptでのHTML変更が終わる前にbrowser.page_sourceを取得してしまっているのではないかと思います。
・十分な時間待つ
・目的のノードの存在をチェックして、存在するようになるまでループして待つ
のどちらかが必要でしょう。

そもそもですが、

urllibでは404エラーを吐きそもそもコード取得が出来ない

ということであれば、プログラムでのアクセスを避けたい意図が感じられるので、利用規約を確認した上でその範囲内でスクレイピングしましょう。

投稿2021/09/15 02:24

otn

総合スコア85901

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

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

0

ヘッドレスブラウザを使うかレンダリング用モジュールを使うとよいでしょう

投稿2021/09/15 02:04

yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問