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

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

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

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

Python 3.x

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

pandas

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

Q&A

解決済

1回答

1571閲覧

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

IrohaAi

総合スコア12

スクレイピング

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

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2017/05/03 05:48

編集2017/05/03 05:51

###前提・実現したいこと
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'

###該当のソースコード

Python

1 2# -*- coding: utf-8 -*- 3import pandas 4 5def get_products(category_url): 6 7 #Search url 8 #Get target_string 9 soup = pandas.io.html.read_html(category_url) 10 #soup.index = ['name','update','where','num','name','update','where'] 11 print(soup) 12 print("--------------------------") 13 14 #三列目を削除 15 soup.drop('3', axis=1) 16 #六列になったものを盾に三列で積み上げる 17 #それぞれの行で Nantが含まれている行は削除 18 #それぞれの行で時刻には日付を付与する 19 20info = 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/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

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

の部分を

Python

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

としてみてください。

投稿2017/05/03 15:24

magichan

総合スコア15898

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

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

IrohaAi

2017/05/04 11:03

回答いただきありがとうございます。当方、GW中で日中お出かけしており今帰宅して確認させていただきました(出先で回答いただいたことは確認していたのですが。。。)。大変遅くなり申し訳ありませんでした。 先ほど、実行すると print(len(soup)) で取得したデータの行は、8になり、 soup = soup.drop(3, axis=1) とするとみごとに3列目が削除されました。 Python初心者勉強中なので、なぜ[0]かはこれから調べようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問