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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

2回答

1164閲覧

複数ページに渡るサイトの情報をスクレイピングする方法

ruuuu

総合スコア172

スクレイピング

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/01/26 09:04

編集2020/01/26 09:12

クローリングのロジックを考えているのですが、ご助言頂きたく質問させて貰いました。
仮に、こちらのサイトのエリア別の施設詳細ページ例えば、京セラドーム大阪の「施設名称」「所在地」「TEL」「交通アクセス」「写真のファイル名」を取得し、DBへ保存する場合は、調べた結果ネット記事を参考に作成可能かと思いました。
しかしそうではなく、全国の施設詳細ページから一度のコマンド実行で、一定時間置き(数秒置きに)にリクエストを投げ、上記内容の情報をページからスクレイピングする効率的な方法がいまいち分かりません。
無数のスクレイピングするファイルを作らずに、実現することは可能でしょうか。
どなたかご助言頂けましたら、幸いです。

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

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

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

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

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

guest

回答2

0

スクレイピングよりもクローリングという技術になります。
そういう用途でしたらScrapyを使うのがいいのではないでしょうか?

Scrapy
https://note.nkmk.me/python-scrapy-tutorial/

スクレイピング関連の本を買うと1章ぐらいはScrapyの記事がのっています。

おすすめ

Pythonクローリング&スクレイピング[増補改訂版]
https://gihyo.jp/book/2019/978-4-297-10738-3

あとクローリングとなるといろいろと法律にかかわることもありますのでしっかり勉強してください
https://topcourt-law.com/internet_security/scraping-illegal

投稿2020/01/26 10:23

barobaro

総合スコア1286

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

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

0

ベストアンサー

私も業務でバリバリ使っているとかではないので、最適解かはわかりませんが、、、
参考サイトの場合「全国の野球場」というところから行けるページに、すべての野球場の一覧があるかと思います。

なのでまずそのページをスクレイピングし、各詳細ページへのリンクの一覧をリストで取得すればよいのではないでしょうか?
全国の野球場ページを見れば、.fa-nameの子であるaタグに詳細画面へのURLがあることがわかります。
また次の20件へのリンクは.p-tonextというクラスのあるaタグを見れば行けそうです。

そんな感じで.fa-nameのリンクをリストに挿入、もし.p-tonextがあればそのURLでまたスクレイピングしてまた.fa-nameを全て取得してリストに挿入というようなことを繰り返して全718施設分の詳細ページへのリンクURLを持つリストを作り、

そのあとでそのリストをfor文で回して各ページをスクレイピングして詳細取得→DBへ保存

といったようなロジックで組めば一回のコマンド(ファイル実行)ですべての情報を取得できるんではないでしょうか?

投稿2020/01/26 10:07

hajifu

総合スコア88

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

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

ruuuu

2020/01/26 10:43

ご回答ありがとうございます。 ご回答いただきましたおかげで、できそうな気がして参りました。 実を申しますと、何ページにも渡る場合、リクエストをなんども送らなければならずそうなった場合、サーバーに負荷をかけすぎてしまわないかとそこの部分が少々不安でして... 実際、ご提示頂いた方法でいきますと、リクエストの回数は1ページのスクレイピングを行なった回数に比例してくるとの認識であっていますでしょうか?
hajifu

2020/01/26 10:53

そうですね、この方法だと、向こうのサーバーにアクセスするのは、 一覧が36ページ分あるようなので36回 各施設の詳細ページへのアクセスで718回 合計754回アクセスすることになります。 けど、スクレイピングは同時に非同期に大量のアクセスを要求するのがまずいのであって、1秒以上間隔を空けてアクセスすれば754回くらいなら全然問題ないと(私の主観ですが)思います。 1ページで得たい情報が全て纏まっているというのでない限り、こういうロジックは避けられないのではないでしょうか?
ruuuu

2020/01/26 11:23

ご返信ありがとうございます。 >1秒以上間隔を空けてアクセスすれば そうですね。スクレイピングをする際は、リクエストを送る際の間隔は数秒開けて再度実行させるよう、注意したいと思います。 自分はスクレイピングをほとんどしたことがないので、かなり苦戦するかもしれませんが、取り敢えず、チャレンジしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問