※このページではアフィリエイト広告を利用しています

【Python応用】青空文庫における任意の作家の作品リストをスクレイピングする方法

Python

ここでは、青空文庫における指定した作家の掲載作品リストとurlをスクレイピングして、excelファイルに保存する方法について解説しています。

この記事の対象

  • 具体的なスクレイピング方法を知りたい方
  • 「urlopen」でのスクレイピング方法を知りたい方
  • スクレイピングした情報をExcelファイルに保存したい方
スポンサーリンク
スポンサーリンク

行ったこと

青空文庫において、「作家別作品リスト:No.***」のナンバーを指定して掲載作品リストとurlをスクレイピングしました。

赤枠の作品リストとurlがスクレイピング内容となります。

プログラム

from bs4 import BeautifulSoup
import urllib.request as req
import openpyxl

#1---No入力
num = 879
#芥川竜之介
#2---URL指定
url = "http://www.aozora.gr.jp/index_pages/person"+str(num)+".html"
res = req.urlopen(url)
soup = BeautifulSoup(res, "html.parser")
#3---Excelファイルの作成
wb = openpyxl.Workbook()
ws = wb.active
ws['A1'].value = 'title'
ws['B1'].value = 'url'
#4---抽出
li_list = soup.select("ol>li")
i = 0
for li in li_list:
    a = li.a
    i += 1
    if a != None:
        ws.cell(row=1+int(i),column=1).value = a.string
        href = a.attrs["href"]
        ws.cell(row=1+int(i),column=2).value = "http://www.aozora.gr.jp" + href.replace("..","",2)
#5---ワークブックをExcelファイルとして保存
wb.save(str(num)+'.xlsx')

プログラムは上記になります。numに任意の数値を指定することでスクレイピング可能です。

それでは、解説していきます。

#1---No入力
num = 879
#芥川竜之介

任意の数値を指定します。ここでは、芥川竜之介にしています。

#2---URL指定
url = "http://www.aozora.gr.jp/index_pages/person"+str(num)+".html"
res = req.urlopen(url)
soup = BeautifulSoup(res, "html.parser")

urlを指定して開いています。次に、開いたurl情報をBeautifulSoupに投げています。

#3---Excelファイルの作成
wb = openpyxl.Workbook()
ws = wb.active
ws['A1'].value = 'title'
ws['B1'].value = 'url'

書き込むためにexcelファイルを開いています。同時にシートも作成しています。

A1とB1のセルに列名として「title」「url」を書き込んでいます。

#4---抽出
li_list = soup.select("ol>li")
i = 0
for li in li_list:
    a = li.a
    i += 1
    if a != None:
        ws.cell(row=1+int(i),column=1).value = a.string
        href = a.attrs["href"]
        ws.cell(row=1+int(i),column=2).value = "http://www.aozora.gr.jp" + href.replace("..","",2)

スクレイピングしたい内容は「ol」要素の真下にある「li」要素の「<a>」になります。

「soup.select(“ol>li”)」は「ol」要素の直下の階層の子要素(li)を複数要素リスト型で返しています。次にfor構文でリスト型で返した分だけ処理を行っています。

 作業中の作品リストも「ol>li」構造になっているので、条件指定して<a>の文字列とurlを取得します。urlに関してはフルのurlにするために「http://www.aozora.gr.jp」を加えるのと「..」という余計な文字を削除して書き込んでいます。

#5---ワークブックをExcelファイルとして保存
wb.save(str(num)+'.xlsx')

最後に保存して終了です。

結果

取得すると上記になります。

数値を変更して他作家の作品リストを取得してみて下さい。

タイトルとURLをコピーしました