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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

2340閲覧

IndexError: list index out of rangeのエラーについて

gon_gon_tarou

総合スコア16

Python 3.x

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

0グッド

1クリップ

投稿2018/11/23 10:04

前提・実現したいこと

webスクレイピングで、サッカーのクラブチームの情報をまとめたいです。
https://www.jleague.jp/

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

IndexError: list index out of range

該当のソースコード

python

1import csv 2from urllib.request import urlopen 3from bs4 import BeautifulSoup 4 5#URLの指定 6html = urlopen("https://www.jleague.jp/sp/club/sapporo/day/#player") 7bsObj = BeautifulSoup(html, "html.parser") 8 9#テーブルを指定 10table = bsObj.findAll("table",{"class":"playerDataTable"})[0] 11rows = table.findAll("tr") 12 13csvFile = open("player.csv", 'wt', newline = '', encoding = 'utf-8') 14writer = csv.writer(csvFile) 15 16try: 17 for row in rows: 18 csvRow = [] 19 for cell in row.findAll(['td', 'th']): 20 csvRow.append(cell.get_text()) 21 writer.writerow(csvRow) 22finally: 23 csvFile.close()

試したこと

utfを変えてみた
if文を追加した

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

使ったサイト
https://www.jleague.jp/sp/club/sapporo/day/#player

Python 3.6.4 :: Anaconda, Inc.

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

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

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

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

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

y_waiwai

2018/11/23 12:22

で、しつもんはなんでしょうか
guest

回答1

0

ベストアンサー

選手の一覧は後からJavascriptでレンダリングされているためデータがありません。
Javascriptを実行してからでないとスクレイピングできません。

Javascriptを実行するには

  1. seleniumでJavascriptをレンダリングしてから実行
  2. scrapy-splashでJavascriptをレンダリングしてから実行
  3. requests-htmlでJavascriptをレンダリングしてから実行

の3種類あり一番簡単な3.requests-htmlで書きます。

Anacondaでrequests-htmlを検索しましたがないようでしたのでpipでインストールしてください
https://anaconda.org/search?q=requests-html

インストール

pip install requests-html

使い方

https://html.python-requests.org/

プログラム

python

1import csv 2from requests_html import HTMLSession 3 4session = HTMLSession() 5r = session.get('https://www.jleague.jp/sp/club/sapporo/day/#player') 6 7# Javascriptレンダリング 8r.html.render() 9 10with open('player.csv', 'w') as fw: 11 writer = csv.writer(fw, dialect='excel', lineterminator='\n') 12 13 for trs in r.html.find('#loadArea > section > table > tbody > tr'): 14 result = [td.text.replace('\n', '') for td in trs.find('td')] 15 writer.writerow(result)

投稿2018/11/23 13:53

barobaro

総合スコア1286

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

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

gon_gon_tarou

2018/11/23 16:14

ありがとうございます! 無事解決いたしました。本当に感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問