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

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

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

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

selenium

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

Q&A

解決済

1回答

1225閲覧

seleniumを用いて取得データをデータフレームに格納したいのです。

Kazuhiro-ch

総合スコア85

スクレイピング

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

selenium

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

0グッド

0クリップ

投稿2021/07/15 10:59

###質問内容

取得したデータをデータフレーム化、既存データに追加したいです。
そのためにまず取得したデータをデータフレーム化したいのですが、うまくいきません。
色々調べてはいるのですが、着眼点がわからず本当に立ち往生しています。
調べ不足というご意見もあると思いますが、ご指導いただければ幸いです。

###ゴール

最終目的としてはcsv上の企業コードを読み込み、そのコードをループで検索、企業情報を抜きたいです。
そしてcsvに自動出力されるところまで実現したいです。

###コード

繰り返し検索→取得する必要があるのでseleniumを用いています。
まだ調べきれていないのですが、pandasでデータフレーム上のコードを読み込み→seleniumで検索→取得→pandasで出力という流れをイメージしています。

本質問は取得→DF化に関する質問です。

####基本のプログラム
こちらが自分で作成した基本のプログラムです。
情報の取得も問題なく行われ、print(info,url)をするときちんと反映されています。

python

1from selenium import webdriver 2from selenium.webdriver.common.keys import Keys 3import time 4import pandas as pd 5 6#read code 7 8df = pd.DataFrame({'SC': ['1401', '1431','1436'], 9 '社名': ['MBS', ' Lib_Work', 'フィット'], 10 '業種': ['建築','建築','建築']},) 11 12data = df.SC 13 14#launch the webdriver 15driver = webdriver.Chrome("C:/users/detec/chromedriver") 16TARGET_URL = "https://kabutan.jp/" 17driver.get(TARGET_URL) 18time.sleep(2) 19 20#access individual page and obtain info 21 22for code in data: 23 search_box = driver.find_element_by_id('input_id') 24 search_box.clear() 25 search_box.send_keys(code) 26 time.sleep(1) 27 search_box.submit() 28 time.sleep(1) 29 30 info_xpath = '//*[@id="kobetsu_right"]/div[4]/table/tbody/tr[3]/td' 31 url_xpath = '//*[@id="kobetsu_right"]/div[4]/table/tbody/tr[2]/td/a' 32 get_info = driver.find_element_by_xpath(info_xpath) 33 get_url = driver.find_element_by_xpath(url_xpath) 34 info = get_info.text 35 url = get_url.text 36 37#to_csv

###試したこと
for構文後にdfで新しい列を作ろうと試みました。
それが以下のプログラムです。

python

1 info_df = pd.DataFrame() 2 for (info,url) in (infos,urls): 3 df['info'] = info 4 df['url'] = url

結果はtoo many values to unpack (expected 2)となりました。

また

python

1df['info'] = get_info.text 2df['url'] = get_url.text

でDFに格納しようとすると

SC 社名 業種 info url 0 1401 MBS 建築 太陽光発電設備が標準の戸建販売。不動産投資、クリーンエネルギー投資事業も。 1 1431 Lib_Work 建築 太陽光発電設備が標準の戸建販売。不動産投資、クリーンエネルギー投資事業も。 2 1436 フィット 建築 太陽光発電設備が標準の戸建販売。不動産投資、クリーンエネルギー投資事業も。 0 https://www.fit-group.jp/ 1 https://www.fit-group.jp/ 2 https://www.fit-group.jp/

と同じ結果が三連続格納されてしまいます。

はじめの試みからfor文を分ければいいのかと考えましたが、反映はされませんでした。

python

1 for i in info: 2 df['info'] = i 3 for a in url: 4 df['url'] = a 5 print(df)

###問題点
都度表示の場合はきちんと反映されるにもかかわらず、格納するしようとすると同じ結果が重複することから格納部分のfor文の回し方がカギであることはわかります。ただそこから自分の考えが至らず進みません。
なんとかわかる方はヒントだけでもいただきたいです。どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

規約確認のためあきらめました。

投稿2021/07/30 05:41

Kazuhiro-ch

総合スコア85

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問