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

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

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

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

Python

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

Q&A

解決済

1回答

1324閲覧

tdタグの数が合わない?

tanusan

総合スコア3

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/05/27 16:34

前提・質問したいこと

何故このようなエラーが出てしまうのか、どのように解決すれば良いのか。

エラー文

line 28, in <module> point_info,per,total = tr_tag.find_all("td") ValueError: not enough values to unpack (expected 3, got 1)

該当のソースコード

import requests from bs4 import BeautifulSoup from time import sleep import pandas as pd url = "https://www.jalan.net/270000/LRG_272000/?stayYear=&stayMonth=&stayDay=&dateUndecided=1&stayCount=1&roomCount=1&adultNum=2&ypFlg=1&kenCd=270000&screenId=UWW1380&roomCrack=200000&lrgCd=272000&distCd=01&rootCd=04/page{}#" d_list = [] for i in range(1,4): target_url = url.format(i) r = requests.get(target_url) sleep(1) soup = BeautifulSoup(r.content, "html.parser") products = soup.find_all("div", class_="p-yadoCassette__body p-searchResultItem__body") for product in products: row = product.find("div", class_="p-yadoCassette__summary p-searchResultItem__summary") table = product.find("table", class_="p-planTable p-searchResultItem__planTable") name = row.find("h2", class_="p-searchResultItem__facilityName").text if table is None: pass else: tr_tags = table.find_all("tr")[1:3] for tr_tag in tr_tags: point_info,per,total = tr_tag.find_all("td") point = point_info.find("li", class_="c-label c-label--orange p-searchResultItem__horizontalLabel overwritePointLabel") perfee = per.find("span") totalfee = total.find("span") if point is None: pass else: d = { "name":name, "point":point.text, "perfee":perfee.text, "totalfee":totalfee.text }

バージョン

Python 3.9.0

一言

Python初心者です。自分なりに調べてみたのですが、解決できませんでした。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの直接の原因は
point_info,per,total = tr_tag.find_all("td")
の部分ですよね。

tr_tag.find_all("td")の戻り値が3つの要素を持つリストである事を期待して、各要素をそれぞれの変数に代入するコードを書いたところ戻り値の要素が1つしかない為エラーになっています。

この行の直前にprint(tr_tag.find_all("td"))を置くと、何が戻ってきているのか確認できるので、問題点が見えてくるかもしれません。

投稿2021/05/27 16:56

udon-ken

総合スコア657

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

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

tanusan

2021/05/27 17:35

ご回答ありがとうございます。 言われたようにprintで見てみました。tdタグの戻り値を3つで固定している状況で、lenで確認してみると1つになっているときにエラーが出ているということがわかりました。誘導から解説まで丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問