1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

サッカーチームの監督名のリストをpythonでスクレイピングする

Last updated at Posted at 2020-09-23

概要

Jリーグの監督一覧のページから監督の名前一覧を取得する方法を説明します。
上記のページでは読みに関してはアルファベットの表記しか載っていませんが、名前の読み方や姓、名も同時に取得したかったので、それらについては後で目視で修正することを前提に、自動で変換します。
その方法についても合わせて説明します。

注意

スクレイピングは法律的な問題に抵触する可能性がある行為ですので、利用については各自の判断/責任でお願いします。(参考:スクレイピングは違法?3つの法律問題と対応策を弁護士が5分で解説

環境

Google Colaboratory (2020年4月3日)

コード

Pythonのrequestsで取得したソースファイルをBeatifulSoupで解析して取得します。
インデックスページから各頭文字の監督リストページのURLを一括取得し、各URLのアクセス先から、具体的な名前とアルファベット表記を抽出しています。

!pip install romkan#GoogleColaboratoryで動かすときは必要

from bs4 import BeautifulSoup
import requests
import time
import romkan

# Jリーグページのurl
base_url = "https://data.j-league.or.jp/"
index_page_id = "SFIX06/"

# htmlソースの取得とパース
html_text = requests.get(base_url+index_page_id).text
soup = BeautifulSoup(html_text,"lxml")

# ソースコードを見ながら情報を抽出するコードを考えて書く
# id=player-indexの要素内のthタグ要素をリストで取得する
link_elems = soup.find(id='player-index').find_all('th')

# 名前、アルファベット表記を格納するリストを宣言
directors = []
for link_elem in link_elems:
  atag = link_elem.find('a')
  if atag != None:
    #特定の頭文字で始まる監督一覧ページへのリンク
    link = atag.get('href')
    html_text2 = requests.get(base_url+link).text
    soup2 = BeautifulSoup(html_text2,"lxml")
    #id=eventViewのtr要素に選手名が入っている
    footballers = soup2.find(id='eventView').find_all('tr')
    for footballer in footballers:
      atag2 = footballer.find('a')
      if atag2 == None: continue
      name = atag2.string
      #名前を表示している要素の次の兄弟要素がアルファベット表記
      alpha = atag2.find_parent().find_next_sibling().string
      #リストに追加
      directors.append([name,alpha])
      #進捗確認のための出力
      print(name,alpha)
    #サーバに負荷を与えないように1秒待機する
    time.sleep(1)

katakana = "・ ーァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴ"
def is_kata(text):
  return all([v in katakana for v in text.replace(' ','')])#スペースはあってもよい

directors_yomi = []
for v in directors:
  name, alpha = v[0], v[1]
  name_f = name.replace('\u3000',' ').replace(' ',' ').replace('',' ')
  if is_kata(name_f):
    fullname = name_f
    if '\u3000' in name:
      first = name.split('\u3000')[0]
      last = name.split('\u3000')[1]
    #elif ' ' in name 
    else:
      first = ''
      last = fullname
  else:
    fullname = romkan.to_katakana(alpha)
    if ' ' in fullname:
      first = fullname.split(' ')[0]
      last = fullname.split(' ')[1]
      fullname = last+' '+ first
    else:
      first = ''
      last = fullname
  if is_kata(fullname) == False:
    name = "#####"+name
  directors_yomi.append([name,alpha,fullname,last,first])
print('\n'.join(['\t'.join(v) for v in directors_yomi]))
1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?