51442


現在私は青空文庫というページにあるデータを入力とする機械学習モデルを作ろうと考えています。  
そのモデルの入力として青空文庫(<https://www.aozora.gr.jp>)
にある作品のテキストデータとその作品の初版発行年が必要なのですが、これらのデータを抽出する方法がわからず困っています。  
青空文庫には様々な作家による小説が保存されていて、ブラウザで直接個別の作品にアクセスできます。  
例えば、青空文庫のトップページから以下のように「ああ華族様だよ
と私は嘘を吐くのであった」という作品のページに飛ぶとテキストデータをダウンロードでき、その末尾の底本情報に以下のように初版出版年などが書かれています。  
[![青空文庫のトップページ](https://i.stack.imgur.com/6MvjD.png)](https://i.stack.imgur.com/6MvjD.png)  
[![上の写真のページであ行の作品のページに飛んだ場合](https://i.stack.imgur.com/yggaw.png)](https://i.stack.imgur.com/yggaw.png)  
[![上の写真のページからで「ああ華族様だよ　と私は嘘を吐くのであった」という作品のページに飛んだ場合](https://i.stack.imgur.com/dUBLv.png)](https://i.stack.imgur.com/dUBLv.png)  
[![上のページからダウンロードしたテキストファイルに書かれている情報](https://i.stack.imgur.com/32bav.png)](https://i.stack.imgur.com/32bav.png)

最初はスクレイピングでデータ抽出することを考えたのですが、githubで青空文庫のデータを一括ダウンロード(<https://github.com/aozorabunko/aozorabunko>)
できることや野良APIであるPubserver(<https://qiita.com/ksato9700/items/48fd0eba67316d58b9d6>)
を利用することができることも知りました。ただ、やはり青空文庫の全ての作品に対してテキストデータと初版発行年を抽出し、後で機械学習にかける入力として作品ごとのテキストデータと初版発行年の組をそれぞれ区別して保存する方法がわからずに混乱しています。  
例えば、上にあげたgithubからデータをダウンロードする場合、cardsに入っている各ファイルの中にあるfilesからテキストデータと初版発行年が埋め込まれたzipファイルを全ての作品についてparseするのが良いのでしょうか?  
初心者的な質問で申し訳ないのですが、アドバイスをいただけると大変助かります。


CC BY-SA 4.0
2018-12-22T09:38:11.697
51439
2018-12-22T11:41:22.013
2018-12-22T11:16:48.780
76
31249
question
python api web-scraping
青空文庫（https://www.aozora.gr.jp）における全作品のテキストデータと初版発行年の取得


GitHubのリポジトリで公開されているデータは、青空文庫ホームページのミラーなので、単にデータを抽出する目的だけを考えればどちらを元にしても同じかと思います。

ただし「全データ」を対象に取得を考えているなら、GitHubリポジトリからの取得を考えるべきです。  
数件程度のピンポイントであればホームページに対してのスクレイピングでも構わないのかもしれませんが、全データを対象にリクエストを送ると相手先へのトラフィックで間違いなく負担をかけてしまいます。


CC BY-SA 4.0
2018-12-22T10:10:53.037
51440
2018-12-22T10:10:53.037
3060
51439
answer


青空文庫テキストへのアクセスについては

[公開中
作家別作品一覧拡充版:全て(CSV形式、UTF-8、zip圧縮)](https://www.aozora.gr.jp/index_pages/list_person_all_extended_utf8.zip)

を元に、`GitHub`からクローンしたローカルリポジトリー内のzipファイルのURLをスクリプト内で、`URL`→ローカルファイルパス変換（"<https://www.aozora.gr.jp/>"をローカルリポジトリーへのパスに置換する）事でトラフィックを押さえられると思います。

また

  * 圧縮ファイルの文字コードはいわゆるShift-JISなので、文字コード変換を事前にしておくと良い
  * 圧縮ファイルの中身のファイル名は圧縮ファイルのファイル名と異なるので、リネームしてzipファイルと同じにしておいた方が良い

などの問題もありますので、ご注意下さい。  
（この辺、プログラムから利用する側にとことん優しくないシステムになっており、プログラムから使いやすい構成になるように、もう少し口出し出来れば良かったと後悔しています）

ファイルへの書き込みは別質問にされるようですのでここでは割愛させていただきます


CC BY-SA 4.0
2018-12-22T11:41:22.013
51442
2018-12-22T11:41:22.013
14745
51439
answer