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

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

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

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

Python

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

Q&A

解決済

1回答

1877閲覧

レンタルサーバーでスクレイピングしたデータをCSVを作成したい

akira111

総合スコア5

スクレイピング

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

Python

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

0グッド

1クリップ

投稿2021/07/27 12:49

実現したいこと

Pythonを使用してスクレイピングを行っています。
当初はローカルで行っていましたが、実行する回数が多くなったので、レンタルサーバーを使用して自動実行することを考えています。
スクレイピング自体はできたのですが、そもそものデータ書き出し方法がわかりません。
他者様のブログなどを参照に、テキストファイルをFTPでアップロードする方法まではできました。

ですが、現行の方法だと書き込み方法があまりスマートではなく、ファイルもテキストファイルではなくCSVファイルの保存を行いたいと思います。(初心者なので標準のCSVモジュールを使用して簡潔に実行できればと思っています。)
なお、最終的にはメールでcsvファイルを送信したいと考えています。

対応方法や下記コードの指摘等あればご教示ください。よろしくお願いいたします。

該当のソースコード

スクレイピングはできている前提で、ここではリストをテキストファイルを書き出してFTPへ保存するコードを掲載します。これは正常に動くことは確認できました。

Python

1import itertools 2import ftplib 3import io 4 5 6# 書き込むデータ 7data = [['a','A'], ['b', 'B'], ['c', 'C']] 8 9# 1行の文字列に 10row = [] 11for d in data: 12 row.append(d[0] + ',' +d[1] + '\n') 13 14line = ''.join(list(itertools.chain.from_iterable(row))) 15 16# 書き込み 17f = io.BytesIO(bytes(line, encoding="utf-8")) 18 19# ftpの接続 20ftp_host = 'xxxxxx.sakura.ne.jp' 21ftp_pass = 'xxxxxx' 22ftp_user = 'xxxxxx' 23 24ftp = ftplib.FTP(ftp_host) 25ftp.set_pasv("True") 26 27ftp.login(ftp_user, ftp_pass) 28ftp.cwd('/home/xxxxxx/xxxxxx/xxxxxx') 29 30ftp.storbinary('STOR /home/xxxxx/xxxxx/xxxxxx/test.txt',f) 31 32ftp.close()

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

レンタルサーバー:さくらのレンタルサーバ スタンダード
Python3.7

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

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

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

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

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

otn

2021/07/27 12:58

何をしたいのか、質問文から読み取れません。 さくらサーバーにftpでputするコードのようなので、ローカルでスクレイピングして作成したデータをさくらサーバーにアップロードしたいと言うことなのでしょうか?
akira111

2021/07/27 13:09

説明不足ですみません。 サーバー上でスクレイピング(CRONを設定し自動実行)したデータをcsvに書き込んでFTPにアップロードしたいという意味です。 ローカルではcsvモジュールやpandasなどを利用してすぐにcsvファイルを作成できるのですが、サーバー上ではどのように実現すればよいか解らず困っています。 最終的にはメール送信したいので、必ずFTPを使用したいというものではありません。
guest

回答1

0

ベストアンサー

FTPサーバーとスクレイピングしているサーバーは別なのでしょうか?
同じならFTPを経由する利点はどんなものがあるのでしょうか?

スクレイピングしたデータをCSV化する機能は、同一コードで行けそうです。ローカルPC環境でもサーバーPC環境でもOSの差異によって多少変化するかもしれませんが、ライブラリが吸収してくれそうです。

CSV化後に直接mail系のライブラリを使って送信するのが良い気がします。
レンタルサーバーならSMTPサーバ機能はついていると思いますので、emailパッケージが使えそうです。

投稿2021/08/02 12:34

ShortArrow

総合スコア141

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

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

akira111

2021/08/02 13:55

「ローカルPC環境でもサーバーPC環境でも…、ライブラリが吸収してくれそうです。」という、とても腑に落ちるコメントをヒントに解決できました。 with open…で作成するcsvファイルはどこかに保存しないと、その後のメールでも添付できないと誤った認識でおりました。同一コード内で処理すれば、そのまま添付できたのですね。 さきほど、emailパッケージの部分も作成し、無事自分のメールアドレスへ意図するファイルが到着いたしました。 この度はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問