#10/25 10:20更新
(スクレイピングした結果を)リスト形式の変数に格納したのですが、上手く出力できず苦戦しています。
「カンマ区切り」[python リスト ファイル出力」等のキーワードでGoogle上を調べても解決に至らず、ご教示頂けないでしょうか。
<スクレイピングした結果のデータのイメージ>
1列1行にカンマ区切りで複数の中身が入っています。分割したいです。
練習用に下記ページをスクレイピングしました。
https://www.mrso.jp/searches/?redirect&view=plan
<トライしたこと>
(1)splitで分割する
split()でカンマで分割しようとすると、なぜかNANと出力されてしまいます。出来たとしても、価格を示す列(例 100,00,200,00)は、10000,20000ではなく、100,00,200,00になる不安があります。
(2-1)データフレームではなく、各リストをテキストに出力して、手で(ctrl+a,c,v)エクセルに貼り付ける
f.writelinesだと上述画像と同じ状況でした。エクセル上で分割して進める事もできますが、非効率ですしpythonを覚えたいのでこの選択肢は除外します。
(2-2)同上。for文で改行を入れる。
残念ながら下記のコードでも上述画像と同じ状況でした。
with open('(ファイル名).txt', 'w') as f:
for d in range(len(コース名:list形式)):
f.write(str(courses_list[d]) + "\n")
(スクレイピングの関数:本題ではないので省略) return courses_list,facili_list, price_list,link_list # コース、施設、価格、URLのリストを戻り値に指定 courses_list,facili_list,price_list,link_list=search(driver) with open('courses2.txt',mode='w', encoding='utf-8') as f: f.writelines((str(courses_list)))
<追記:元のスクレイピングのコード>
import time from selenium import webdriver driver=webdriver.Chrome() driver.get('https://www.mrso.jp/searches/?redirect&view=plan') def search(driver): i = 1 # ループ番号、ページ番号を定義 i_max = 5 # 最大何ページまで分析するかを定義 courses_list=[] facili_list=[] price_list=[] link_list=[] # 現在のページが指定した最大分析ページを超えるまでループする while i <= i_max: class_group =driver.find_element_by_class_name('page-search__list') courses_list.append([elem.text for elem in class_group.find_elements_by_class_name('-name')]) facili_list.append([elem.text for elem in class_group.find_elements_by_class_name('-facility-name')]) price_list.append([elem.text for elem in class_group.find_elements_by_class_name('-price')]) link_list.append([elem.get_attribute('href') for elem in class_group.find_elements_by_class_name('-link')]) try: next_list = driver.find_element_by_class_name('-next').click() i += 1 time.sleep(3) # 3秒間待機 except: break return courses_list,facili_list, price_list,link_list # コース名と施設名と価格とリンクのリストを戻り値に指定 courses_list,facili_list,price_list,link_list=search(driver) <抽出後のコード> import pandas as pd df=pd.DataFrame() df['施設名']=facili_list df['コース名']=courses_list df['価格']=price_list df['リンク']=link_list df.index = df.index + 1 df.head() #上述の画像の画面
<リストの中身の様子>
[['人間ドック(胃ABC)全身CTスキャン 低線量AIDR3D マルチスライスCTで実施', '人間ドック + 胃カメラコース (新規オープン価格)', ***膨大なため以下省略
回答1件
あなたの回答
tips
プレビュー