前提・実現したいこと
Pythonのseleniumを用いてプロ野球の一球速報のスクレイピングを行おうとしているのですが、
塁状況をスクレイピングしようとすると無走者時は塁情報のテキストが空白になってしまうため、
エラーが出てしまいスクレイピングができません。
塁状況が空白時にはそのままスクレイピングを進め、
塁に人が埋まった場合にはその際の走者の選手名をスクレイピングできるようにしたいです。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\YM\PycharmProjects\samle\main.py", line 47, in <module> print(elem_1B.text) AttributeError: 'list' object has no attribute 'text'
該当のソースコード
from selenium import webdriver import chromedriver_binary import time import csv import datetime from selenium.common.exceptions import NoSuchElementException import re driver = webdriver.Chrome() driver.get('https://baseball.yahoo.co.jp/npb/game/2020082103/score?index=0110100') csv_date = datetime.datetime.today().strftime("%Y%m%d") csv_file_name = "carp_data_" + csv_date + ".csv" f = open(csv_file_name, "w", encoding="CP932", errors="ignore") writer = csv.writer(f, lineterminator="\n") csv_header = ["球数", "投手", "投", "打者", "打席", "球種", "球速", "結果", "コース", "一塁", "二塁", "三塁"] writer.writerow(csv_header) i = 0 item = 1 while True : i = i + 1 time.sleep(5) try: elem_pitcher = driver.find_element_by_xpath('//*[@id="gm_rslt"]/tbody/tr/td[1]/a') elem_pitch = driver.find_element_by_xpath('//*[@id="gm_rslt"]/tbody/tr/td[2]') elem_batter = driver.find_element_by_xpath('//*[@id="gm_rslt"]/tbody/tr/td[3]/a') elem_bat = driver.find_element_by_xpath('//*[@id="gm_rslt"]/tbody/tr/td[4]') elem_1B = driver.find_elements_by_xpath('//*[@id="base1"]/span') elem_2B = driver.find_elements_by_xpath('//*[@id="base2"]/span') elem_3B = driver.find_elements_by_xpath('//*[@id="base3"]/span') except NoSuchElementException: pass except AttributeError: pass elems_tb = driver.find_elements_by_xpath('//*[@id="pitchesDetail"]/section[2]/table[3]/tbody/tr/td[3]') elems_tc = driver.find_elements_by_xpath('//*[@id="pitchesDetail"]/section[2]/table[3]/tbody/tr/td[4]') elems_te = driver.find_elements_by_xpath('//*[@id="pitchesDetail"]/section[2]/table[3]/tbody/tr/td[5]') elems_td = driver.find_elements_by_xpath('//*[@id="pitchesDetail"]/section[2]/table[1]/tbody/tr/td/div/span') for elem_tb, elem_tc, elem_te, elem_td in zip(elems_tb, elems_tc, elems_te, elems_td): print(elem_pitcher.text) print(elem_pitch.text) print(elem_batter.text) print(elem_bat.text) pitch_position = elem_td.get_attribute('style') print(pitch_position) print(elem_1B.text) print(elem_2B.text) print(elem_3B.text) csvlist = [str(item), elem_pitcher.text, elem_pitch.text, elem_batter.text, elem_bat.text, elem_tb.text, elem_tc.text, elem_te.text, elem_1B.text, elem_2B.text, elem_3B.text] writer.writerow(csvlist) item = item + 1 next_link = driver.find_element_by_id('btn_next') driver.get(next_link.get_attribute('href')) driver.close()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/26 04:38
2021/01/26 04:53
2021/01/26 06:05
2021/01/26 07:06
2021/01/26 07:16
2021/01/26 07:39
2021/01/26 08:13
2021/01/26 08:21
2021/01/26 08:28
2021/01/26 08:34
2021/01/26 08:50
2021/01/26 10:33
2021/01/26 11:24
2021/01/26 11:28
2021/01/26 11:43
2021/01/26 12:05