###質問内容
取得したデータをデータフレーム化、既存データに追加したいです。
そのためにまず取得したデータをデータフレーム化したいのですが、うまくいきません。
色々調べてはいるのですが、着眼点がわからず本当に立ち往生しています。
調べ不足というご意見もあると思いますが、ご指導いただければ幸いです。
###ゴール
最終目的としては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文の回し方がカギであることはわかります。ただそこから自分の考えが至らず進みません。
なんとかわかる方はヒントだけでもいただきたいです。どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。