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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python

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

pandas

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

Q&A

解決済

1回答

871閲覧

dataframeのcsv出力について

puti0621

総合スコア2

Python

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

pandas

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

0グッド

0クリップ

投稿2021/10/23 11:36

前提・実現したいこと

Pythonでサイトからのスクレイピングにチャレンジしています。

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

pandasでdataframeを作成して、csvファイルに出力する際に勝手に改行されて、左側にスペースが空いてしまいます。

csv

1企業名,電話番号,メールアドレス,都道府県,市町村区,番地,URL,SSL証明書 2" 3 金太楼鮨 浅草中央店",050-5281-5483, , 東京都,台東区,浅草1‐17‐12,https://kintarou.owst.jp/,True 4" 5 祭ずし 大森店",050-5449-9694, , 東京都,大田区,大森北1‐2‐8,https://matsuriomori.owst.jp,True 6" 7 幸寿司",050-5831-5284, , 東京都,練馬区,練馬1‐20‐2 TKGビル1F, ,False 8" 9 時代寿司",03-3261-6550, , 東京都,千代田区,飯田橋1‐7‐5, ,False 10" 11 紀文寿司",050-5257-4691, , 東京都,台東区,浅草1-17-10, ,False 12" 13 寿司作",03-3758-4144, , 東京都,大田区,西嶺町9‐6 久が原台スカイマンション1F,http://www.facebook.com/#!/fumio.sugino?fref=ts,False 14" 15 新楽寿司",050-5257-2095, , 東京都,港区,新橋3-21-2タカラビル2F, ,False 16" 17 寿司貞",03-3241-6000, , 東京都,中央区,日本橋室町1-8-4, ,False 18" 19 いろは寿司",042-722-3850, , 東京都,町田市,原町田6-10-17, ,False 20" 21 栄寿司",03-3420-1371, , 東京都,世田谷区,世田谷1‐24‐3,http://home.u01.itscom.net/susi/,False 22" 23 柳寿司",050-5257-8121, , 東京都,豊島区,西池袋1-18-1 五光ビル1、2、3階,http://yanagizusi.owst.jp,False 24" 25 桜寿司",050-5861-7134, , 東京都,江戸川区,中葛西3-37-12, ,False 26" 27 健寿司",03-3731-3411, , 東京都,大田区,蒲田5-19-3, ,False 28" 29 太助寿司",050-5281-7108, , 東京都,台東区,松が谷2-26-6,http://tasuke-sushi.com/,False 30" 31 菊寿司",050-5355-1761, , 東京都,中央区,日本橋兜町17-1,http://www.kiku-sushi.com/,False 32" 33 金井寿司",050-5265-0390, , 東京都,品川区,東大井5-3-5, ,False 34" 35 寿司の磯松",03-6712-0343, , 東京都,港区,港南2-3-13 品川フロントビル2F, ,False 36" 37 司寿司",03-3688-2156, , 東京都,江戸川区,中葛西3-30-11,http://syokunin.jp/tsukasazushi/,False 38" 39 吉亀寿司",03-3351-0614, , 東京都,新宿区,富久町16-5,http://yoshikame.com/,False 40" 41 剣寿司",050-5815-5725, , 東京都,足立区,入谷4-10-24,http://www.kenzushi.net/,False 42" 43 寿司義",050-5265-8408, , 東京都,八王子市,大和田町2-17-7, ,False 44" 45 寿司銀",050-5257-0626, , 東京都,武蔵野市,吉祥寺南町4-3-13 井の頭サマリヤマンション1F,https://sushigin.owst.jp,True 46

該当のソースコード

python

1from types import new_class 2import requests 3from bs4 import BeautifulSoup 4import pandas as pd 5from time import sleep 6import re 7 8base_url = 'https://www.hotpepper.jp/SA11/fwt%E5%AF%BF%E5%8F%B8/bgn{}/' 9 10#base_urlを使って、トップページから順番にアクセス 11d_list = [] 12#1~2ページにアクセス 13for i in range(1,2): 14 print('='*30,i,'='*30) 15 url = base_url.format(i) 16 sleep(3) 17 res = requests.get(url,timeout=3) 18 soup = BeautifulSoup(res.content,'lxml') 19#企業の詳細ページにアクセス 20 a_tags = soup.select('h3.shopDetailStoreName > a') 21 for a_tag in a_tags: 22 page_url = 'https://www.hotpepper.jp/' + a_tag.get('href') 23 sleep(3) 24 page_res = requests.get(page_url,timeout=3) 25 page_soup = BeautifulSoup(page_res.content,'lxml') 26#格リストの情報を抽出 27 shop_name = page_soup.select_one('div.shopInner > div > table > tbody > tr > td').text 28 tel = page_soup.select_one('div.qualificationArea > div > span').text 29 mail = ' ' 30 address = page_soup.select_one('table.infoTable > tbody > tr:nth-of-type(2) > td > address').text 31 if address: 32 pat = '(...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下>松|岩国|田川|大村|宮古|富良野|別府|佐伯|黒部|小諸|塩尻|玉野|周南)市|(?:余市|高市|[^市]{2,3}?)郡(?:玉村|大町|.{1,5}?)[町村]|(?:.{1,4}市)?[^町]{1,4}?区|.{1,7}?[市町村])(.+)' 33 34 address_list = re.split(pat,address) 35 pref = address_list[1] 36 city = address_list[2] 37 number_builing = address_list[3] 38 39 40 else: 41 pref = ' ' 42 city = ' ' 43 number = ' ' 44 building = ' ' 45 web_site = page_soup.select_one('div.shopInfoDetail > ul > li > a') 46 if web_site: 47 web_site = web_site.get('href') 48 else: 49 web_site = ' ' 50 if web_site: 51 if 'https' in web_site: 52 ssl = True 53 else: 54 ssl = False 55 56 d_list.append({ 57 '企業名':shop_name, 58 '電話番号':tel, 59 'メールアドレス':mail, 60 '都道府県':pref, 61 '市町村区':city, 62 '番地':number, 63 'URL':web_site, 64 'SSL証明書':ssl 65 }) 66#dataframe作成 67df = pd.DataFrame(d_list) 68df.to_csv('shop_list.csv',index=None,encoding='utf-8-sig')

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

解決策等ご教授頂けますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

shop_nameの前半に''\n\t\t\t\t\t'が入っているためです。
元々のhtmlがそうだったのでしょう。

python

1 shop_name = page_soup.select_one('div.shopInner > div > table > tbody > tr > td').text

に以下のように一行追加して、再度実行してみてください。

python

1 shop_name = page_soup.select_one('div.shopInner > div > table > tbody > tr > td').text 2 shop_name = re.sub('\n\t*', '', shop_name)

投稿2021/10/23 12:59

ppaul

総合スコア24670

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

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

puti0621

2021/10/23 14:03

ご丁寧な回答ありがとうございます。 ご提示頂いたコードに変更したところ、左側の余分なスペースは削除する事が出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問