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

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

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

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Beautiful Soup

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

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

3886閲覧

「IndexError: list index out of range」のエラーを直したい。

k-ymd

総合スコア12

スクレイピング

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Beautiful Soup

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

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/02/08 11:28

Pythonにてスクレピングをするプログラムを作ろうとしております。
全て書き終わり、実行すると次のエラーが起きてしまい、どのようにすればよいのか調べてもわからないため、質問させていたきます。
▼エラー画面

Trackback(most recent call last): File "Scraping.py", line 43, in<module> page = elems[0].getText() IndexError: list index out of range

▼プログラム文(※一部抜粋)

print_message("ワークファイルの作成") with open(work_file, 'w', encoding=file_code) as f: # ループ(ページの最後まで or 先頭行) while flag: r = requests.get("https://gadget-shot.com/page/" + str(count)) soup = BeautifulSoup(r.content, "html.parser") elems = soup.select('#paginate > strong') page = elems[0].getText() if int(count) != int(page): print_message("ループから抜けます") break print(str(page) + "ページ目") articles = soup.find("ul", "entries").find_all("li", "post-48425") # 1ページ単位の記事を書き込む for article in articles: imageUrl = article.find("div", "list-thumb-img").img.get("src") title = article.find("h3", "list-post-title").img.get("title") pageUrl = article.find("h3", "list-post-title").a.get("href") line = ('"' + imageUrl + '","' + title + '","' + pageUrl + '"\n').encode(file_code, "ignore").decode(file_code) if top_line == line: print_message("重複を発見しました。") count = -1 break f.write(line) count = int(count) + 1 time.sleep(10)

無事、実行するためにはどうすれば良いのでしょうか。一応エラーで「IndexError: list index out of range」とでているので、配列の何かが間違っているのは分かったのですが、どのように修正すればよいか分かりません。
どうかご教授ください。よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

お疲れ様です。

elems = soup.select('#paginate > strong')
において、elemsに有効な情報が入ってますか?
len(elems)とすると、何がでますでしょうか。

空のリストの場合、
IndexError: list index out of range
が出ると思います。

投稿2020/02/08 11:48

0kcal

総合スコア275

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

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

0

コンテンツに'#paginate > strong'な要素がないことによりelemが空リストのため提示エラーが発生しています。コンテンツの構造を確認しselectを修正する必要があります。

投稿2020/02/08 11:45

can110

総合スコア38341

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

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

0

ベストアンサー

elemsが空のために起こっているエラーなので、ifで空かどうか(要素数が0か)調べて、空ならしかるべき対処をします。

つまり、
'#paginate > strong'が無いことが想定外なら、エラーで終了している現状でよい気がします。
'#paginate > strong'無いことも想定内なら、その想定した通りの対処をします。

投稿2020/02/08 11:44

otn

総合スコア85901

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

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

otn

2020/02/08 13:39

もし想定外ということなら、想定通りのHTMLが得られていないということなので、もう一度HTMLを見て考え直すんでしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問