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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

1回答

13303閲覧

スクレイピングしたときに表示されるエラー"ValueError: arrays must all be same length"を解決したい

yd839

総合スコア10

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/09/10 11:13

Webスクレイピングをしたときに、ValueError: arrays must all be same length と表示されるので、それを解決したいです。

書いたコード

import lxml.html from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd import time test1 = [] test2 = [] test3 = [] for page in range(1,20): driver = webdriver.Chrome('/usr/local/bin/chromedriver') driver.get("https://*****.com/") data = driver.page_source.encode('utf-8') soup = BeautifulSoup(data, "lxml") for o in soup.findAll("h1"): test1.append(o.string) for o1 in soup.findAll("span", class_="data"): test2.append(o1.string) for o2 in soup.findAll("div", class_="text2"): test13.append(o2.get_text()) time.sleep(1) nan = float("nan") df = pd.DataFrame({"あああ":test1, "いいい":test2, "ううう":test3}) print(df) driver.quit()

エラー

ValueError: arrays must all be same length

調べたこと

  • スクレイピングしたときに、欠損した値があるため(取得できなかった時がある?)列がずれてしまって、データの長さが一致しないことは理解しました
  • NaNでもいいので、一発でdataframeにしたいのですが、ググってもわかりませんでした・・・

解決方法を教えていただければ嬉しいです。
宜しくお願いします。

p.s.
test2だけをコメントアウトすると、通常通りスクレイピングできたので、test2にズレがあるのだと思います。

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

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

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

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

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

guest

回答1

0

どの行でエラーが発生しているか明確でないので、エラーメッセージから察するに、以下の箇所でエラーが発生していそうです。

python

1df = pd.DataFrame({"あああ": test1, "いいい": test2, "ううう": test3})

スクレイピングができていないのではなく、dataframe生成時にエラーが発生しているのではないかと。

原因はエラーメッセージにもあるとおり、dataframeを生成しようとしているにもかかわらず、配列test1, test2, test3のlengthが異なるためと思われます。
事前に取得している各要素の数が一致していないためにエラーが発生してるのでしょうね。

サイトの要素の数をチェックするなりし、各要素取得時の動作を設計し直すことをおすすめします。

投稿2018/09/10 12:40

編集2018/09/10 16:41
tebonz

総合スコア198

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

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

yd839

2018/09/12 11:59

``` --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-18-bdad8517313d> in <module>() 31 32 ---> 33 df = pd.DataFrame({"企画名":title_name, "企画者":founder_name, "支援総額":money}) 34 35 print(df) ~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy) 346 dtype=dtype, copy=copy) 347 elif isinstance(data, dict): --> 348 mgr = self._init_dict(data, index, columns, dtype=dtype) 349 elif isinstance(data, ma.MaskedArray): 350 import numpy.ma.mrecords as mrecords ~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/pandas/core/frame.py in _init_dict(self, data, index, columns, dtype) 457 arrays = [data[k] for k in keys] 458 --> 459 return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype) 460 461 def _init_ndarray(self, values, index, columns, dtype=None, copy=False): ~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/pandas/core/frame.py in _arrays_to_mgr(arrays, arr_names, index, columns, dtype) 7313 # figure out the index, if necessary 7314 if index is None: -> 7315 index = extract_index(arrays) 7316 7317 # don't force copy because getting jammed in an ndarray anyway ~/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/pandas/core/frame.py in extract_index(data) 7359 lengths = list(set(raw_lengths)) 7360 if len(lengths) > 1: -> 7361 raise ValueError('arrays must all be same length') 7362 7363 if have_dicts: ValueError: arrays must all be same length ``` と出力されたので、確かにその箇所でエラーが起きていることは理解できています。これを欠損値NaNで埋める?という処理を前にかけばいいということなのでしょうか? 要素については、20頁ほどみても同じ要素だったのでスクレイピングする箇所は間違っていないと思うのですが…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問