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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Beautiful Soup

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

1回答

714閲覧

Pythonのfind_allで要素を取得する際にのエラーに関して

keichan

総合スコア12

Beautiful Soup

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/04/30 13:24

編集2021/04/30 13:35

find_allで取得しようと思った際に以下のエラーメッセージが出てしまい、うまく取得することができなくなってしまっています。

例外が発生しました: ValueError

too many values to unpack (expected 6)
File "/Users/takayamakeitaakira/Desktop/ScrapingBeginner-main 2/keiba_oddsparkのコピー.py", line 97, in <module>
number,a, b, name, weight, jockey = tr_tag.find_all('td')

'td'の数をカウントもあっていると思うのですがどうしてもうまくいかないため改善方法がわかる方がいらっしゃれば是非教えていただけると幸いです。

以下が全体のコードになります。

pyhton

1 2コード 3 4# 標準的に搭載されているもの 5from time import sleep 6from bs4.element import Tag 7 8# もともと入っていないもの 9from selenium import webdriver 10from selenium.webdriver.chrome.options import Options 11from bs4 import BeautifulSoup 12import pandas as pd 13from pprint import pprint 14 15 16# 前提条件定義================================= 17mypage_id = 'ログインID' 18password = 'パスワード' 19security_number = '暗証番号' 20 21# chrome_pathを導入する 22chrome_path = '/Users/takayamakeitaakira/Desktop/ScrapingBeginner-main 2/chromedriver' 23 24# optionについて定義づけ!シークレットモードでwebを開く 25options = Options() 26options.add_argument('--incognito') 27driver = webdriver.Chrome(executable_path=chrome_path, options=options) 28 29 30# 実行開始============================================================ 31# マイページに入るーーーーーーーーーーーーーーーーーーーーーーーー 32url = ('https://www.oddspark.com/') 33driver.get(url) 34# input_section = driver.find_element_by_id('top2') 35 36id_box = driver.find_element_by_xpath('//*[@id="top2"]/div[1]/form/table/tbody/tr[1]/td/input') 37passwprd_box = driver.find_element_by_xpath('//*[@id="top2"]/div[1]/form/table/tbody/tr[2]/td/input') 38 39id_box.send_keys(mypage_id) 40passwprd_box.send_keys(password) 41 42driver.find_element_by_class_name('btn1').click() 43 44sleep(2) 45 46security_number_box = driver.find_element_by_xpath('//*[@id="contentS"]/form/table/tbody/tr/td/input') 47security_number_box.send_keys(security_number) 48driver.find_element_by_xpath('//*[@id="contentS"]/form/div/input').click() 49 50sleep(3) 51 52driver.find_element_by_xpath('//*[@id="simplemodal-container"]/a').click() 53 54sleep(3) 55 56# 競馬のページに入っていく========================================= 57driver.find_element_by_xpath('//*[@id="nav2"]/li[1]/a').click() 58 59sleep(1) 60# レース情報ページに 61driver.find_element_by_xpath('//*[@id="nav"]/ul/li[2]/a').click() 62sleep(1) 63 64# 1日出走に入っていく 65try: 66 driver.find_element_by_xpath('//*[@id="raceToday"]/div[1]/ul[4]/li[1]/a').click() 67except: 68 driver.find_element_by_xpath('//*[@id="date_pr"]/li/a').click() 69 driver.find_element_by_xpath('//*[@id="raceToday"]/div[1]/ul[4]/li[1]/a').click() 70 71sleep(1) 72 73 74# 情報獲得================================= 75d_list = [] 76 77html = driver.page_source.encode('utf-8') 78 79soup = BeautifulSoup(html, 'lxml') 80 81elements = soup.find_all('div', class_='w480px') 82 83 # レース名を取得 84 race_title = element.find('a') 85 tr_tags = element.find_all('tr') 86 87 88 for tr_tag in tr_tags[2:]: 89 90 number,a, b, name, weight, jockey = tr_tag.find_all('td') 91 92 d = { 93 'race_title':race_title, 94 'number':number, 95 'a':a, 96 'b':b, 97 'name':name, 98 'weight':weight, 99 'jockey':jockey 100 } 101 d_list.append(d) 102 103 pprint(d_list) 104

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

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

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

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

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

otn

2021/04/30 13:32

エラーメッセージ全文を載せましょう。
keichan

2021/04/30 13:35

申し訳ございませんでした。 訂正させていただきました。
guest

回答1

0

エラーメッセージの通り、代入の左辺に変数が6つなのに、右辺のリストの要素がそれより多いと言うことです。

'td'の数をカウントもあっていると思うのですが

実際には合ってないと言うことです。
printしてみれば一目瞭然では?

投稿2021/04/30 13:40

otn

総合スコア84555

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

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

ikapy

2021/04/30 13:46

number,a, b, name, weight, jockey = tr_tag.find_all('td') を hoge = tr_tag.find_all('td') print(hoge) にして確認したらよいでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問