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

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

ただいまの
回答率

88.92%

Webサイトから取得したデータが加工できません。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 934

IrohaAi

score 12

前提・実現したいこと

Python初心者で勉強中です。サンプルの行き先表示板を題材にして「名前」「更新(時刻)」「行き先」を取り込み、DBへ格納することを実現しようとしています。
※実際に会社で運用して勤怠に使おうかと考えています。

取得したデータ
[            0      1            2      3              4      5     6
0          名前     更新          行き先    NaN             名前     更新   行き先
1  Main Staff    NaN          ボーマ  09:42            NaN    NaN   NaN
2        荒巻大輔  22:09          課長室    NaN             パズ  15:50  張り込み
3        草薙素子  21:16          uuu    NaN            アズマ  12:00  聞き込み
4         バトー  11:58           帰宅    NaN  Support Staff    NaN   NaN
5         トグサ  22:09  mDSMwkgsGTh    NaN            プロト  23:26    ラボ
6        イシカワ  11:29       月末まで入院    NaN           タチコマ  17:46  おでかけ
7        サイトー  23:26           在室    NaN            オペ子  17:46    大阪]

を使って、必要な情報のみに加工しようとしたのですがことごとくエラーとなりました。以下の四工程をしたいのですが。。。

三列目を削除
soup.drop('3', axis=1) → ここでエラー
六列になったものを縦に三列で積み上げる
それぞれの行で NaNが含まれている行は削除
それぞれの行で時刻には日付を付与する

いろいろ試みたのですが、行き詰ってしまいました。皆さんのお力お貸しください。よろしくお願い致します。

発生している問題・エラーメッセージ

エラーメッセージ

  File "<ipython-input-52-fdc5e20d55af>", line 1, in <module>
    runfile('C:/Users/hase/出退テスト.py', wdir='C:/Users/〇〇')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/〇〇/出退テスト.py", line 25, in <module>
    info = get_products('http://www.serina.org/cgi-bin/ikisaki/ikisaki.cgi/~achain/cgiroom/ikisaki/?rfsh=0&column=2')

  File "C:/Users/〇〇/出退テスト.py", line 20, in get_products
    soup.drop('3', axis=1)

AttributeError: 'list' object has no attribute 'drop'

該当のソースコード

# -*- coding: utf-8 -*-
import pandas

def get_products(category_url):

    #Search url
    #Get target_string
    soup = pandas.io.html.read_html(category_url)
    #soup.index = ['name','update','where','num','name','update','where']
    print(soup)
    print("--------------------------")

    #三列目を削除
    soup.drop('3', axis=1)
    #六列になったものを盾に三列で積み上げる
    #それぞれの行で Nantが含まれている行は削除
    #それぞれの行で時刻には日付を付与する

info = get_products('http://www.serina.org/cgi-bin/ikisaki/ikisaki.cgi/~achain/cgiroom/ikisaki/?rfsh=0&column=2')

試したこと

三列目を削除しようと
soup.drop('3', axis=1)
と記述したのですが、エラーがでました。

print(len(soup))
で取得したデータの行を確認したのですが、大きな一行となっているようで
1 と表示されました。 こんな感じです。
[            0      1            2      3              4      5     6
0          名前     更新          行き先    NaN             名前     更新   行き先
1  Main Staff    NaN          ボーマ  09:42            NaN    NaN   NaN
2        荒巻大輔  22:09          課長室    NaN             パズ  15:50  張り込み
3        草薙素子  21:16          uuu    NaN            アズマ  12:00  聞き込み
4         バトー  11:58           帰宅    NaN  Support Staff    NaN   NaN
5         トグサ  22:09  mDSMwkgsGTh    NaN            プロト  23:26    ラボ
6        イシカワ  11:29       月末まで入院    NaN           タチコマ  17:46  おでかけ
7        サイトー  23:26           在室    NaN            オペ子  17:46    大阪]

soup.index = ['one', 'two', 'three'] 
soup.columns = ['a', 'b', 'c']
※実際は必要行数・列数分用意して実行してみましたがダメでした。

soup.index = ['name','update','where','num','name','update','where']
でも変更できませんでした。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

soup = pandas.io.html.read_html(category_url)

の部分を

soup = pandas.io.html.read_html(category_url)[0]

としてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/04 20:03

    回答いただきありがとうございます。当方、GW中で日中お出かけしており今帰宅して確認させていただきました(出先で回答いただいたことは確認していたのですが。。。)。大変遅くなり申し訳ありませんでした。

    先ほど、実行すると
    print(len(soup))
    で取得したデータの行は、8になり、
    soup = soup.drop(3, axis=1)
    とするとみごとに3列目が削除されました。

    Python初心者勉強中なので、なぜ[0]かはこれから調べようと思います。
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る