AKB48と乃木坂46のサイトから画像と名前をスクレイピングしたよ。

AKB48と乃木坂46のサイトから画像と名前をスクレイピングしたよ。

Pythonでのスクレイピングの続きです。

AKB48のサイトと乃木坂46の公式サイトにメンバー一覧があります。ここから、名前と画像のURLをCSVに取得しました。


[使用パッケージ]

  • pandas
  • selenium
  • time
  • subprocess

作った流れはこんな感じ

1 nogisaka-sc.pyファイルを作り、乃木坂のサイトからデータ取得
2 akb-sc.pyファイルを作り、AKBのサイトからデータ取得
3 両方のファイルを実行するファイルget-idol.pyを作成し1,2のファイルを順に実行するファイルを作成する

1のコードは以下

from selenium import webdriver
import pandas
import time

"""***************************************
設定
***************************************"""
browser = webdriver.Chrome()
df = pandas.read_csv('default.csv', index_col=0)
url = "http://www.nogizaka46.com/member/" #取得サイト

"""******************************
CSS SELECTORの設定
******************************"""
POSTS = "div.unit"
ACTRESS_NAME = "span.main" #名前

"""***************************************
実行部分
***************************************"""

browser.get(url)

print("Starting to get posts...")
posts = browser.find_elements_by_css_selector(POSTS) #メンバー数
print (len(posts))

for post in posts:
   try:
       name = post.find_element_by_css_selector("span.main").text
       class_name = post.find_element_by_tag_name("img").get_attribute("class")
       print(name)
       thumnailURL = "http://img.nogizaka46.com/www/member/img/" + class_name + "_prof.jpg"
       print(thumnailURL)
       se = pandas.Series([name,thumnailURL,"nogisaka"],["name", "image","group"])
       df = df.append(se, ignore_index=True)
   except Exception as e:
       print(e)

"""***************************************
書き出し部分
***************************************"""

print("Finished Scraping. Writing CSV.......")
df.to_csv("idol.csv", encoding="UTF-8", mode="a", header="false")
print("CSV Writed.")

"""***************************************
後処理部分
***************************************"""

browser.close()
print("DONE")

最初に読み込んでいるdefault.csvは ,name,url だけが書いてあるCSVファイルです。最終書き出し時にヘッダになります。

from selenium import webdriver
import pandas
import time

"""***************************************
設定
***************************************"""
browser = webdriver.Chrome()
df = pandas.read_csv('default.csv', index_col=0)
url = "https://www.akb48.co.jp/about/members/" #取得サイト

"""******************************
CSS SELECTORの設定
******************************"""
POSTS = "li"
ACTRESS_NAME = "h4.memberListNamej" #名前

"""***************************************
実行部分
***************************************"""

browser.get(url)

print("Starting to get posts...")
posts = browser.find_elements_by_css_selector(POSTS) #メンバー数
print (len(posts))

for post in posts:
   try:
       name = post.find_element_by_css_selector(ACTRESS_NAME).text
       #class_name = post.find_element_by_tag_name("img").get_attribute("class")
       print(name)
       thumnailURL = post.find_element_by_tag_name("img").get_attribute("src")
#       thumnailURL = "http://img.nogizaka46.com/www/member/img/" + class_name + "_prof.jpg" #画像は固定で
       print(thumnailURL)
       se = pandas.Series([name,thumnailURL,"akb"],["name", "image","group"])
       df = df.append(se, ignore_index=True)
   except Exception as e:
       print(e)

"""***************************************
書き出し部分
***************************************"""

print("Finished Scraping. Writing CSV.......")
df.to_csv("idol.csv", encoding="UTF-8", mode="a", header="true")
print("CSV Writed.")

"""***************************************
後処理部分
***************************************"""

browser.close()
print("DONE")

だいたい一緒ですね。

でこれを読み出すファイル

import subprocess

path = ['akb-sc.py', 'nogisaka-sc.py']

def main():
  ret1 = subprocess.run(["python", path[0]],check=True)
  print(ret1)
  ret2 = subprocess.run(["python", path[1]],check=True)
  print(ret2)

if __name__ == "__main__":
  main()