はじめに
図書館で借りた本のログを取りたいなと思い、貸出中の本のリストを取得するプログラムを書いてみた。今まで借りた本が見れないので、どうにかログを残したいと思ってる。
やったこと
ログインして決め打ちで書名を取得する。HTMLを確認しながら、地道にがんばった。
authenticity_token
は毎回変わるみたいなので、取得してPOSTする。
マジックナンバーはHTMLを見たら意図がわかると思う。
from bs4 import BeautifulSoup
import requests
payload = {
'utf8': '✓',
'user[login]': 'xxx',
'user[passwd]': 'yyy',
'act_login': 'ログイン',
'nextAction': 'mypage_display',
'prevAction': '',
'prevParams': '',
'kobeid': '',
'pvolid': '',
'type': '',
'shozo_kyk': ''
}
s = requests.Session()
r = s.get('https://www.lib.city.kobe.jp/opac/opacs/mypage_display')
soup = BeautifulSoup(r.text)
auth_token = soup.find(attrs={'name': 'authenticity_token'}).get('value')
# print(auth_token)
payload['authenticity_token'] = auth_token
res = s.post('https://www.lib.city.kobe.jp/opac/opacs/login', data=payload)
res.raise_for_status()
# print(res.text)
r = s.get('https://www.lib.city.kobe.jp/opac/opacs/lending_display')
soup = BeautifulSoup(r.text)
booklist = soup.find('div', class_= 'table_wrapper lending').find_all('tr')
print(len(booklist)-1)
for book in booklist[1:]:
book_name = book.find_all('td')[2].get_text()
print(book_name)
結果はこんな感じ。ほぼ絵本。ちなみに落合陽一氏の本も子育てのこと考えて借りてみたけど、なかなか頭に入ってこなかった。
超AI時代の生存戦略 : 「2040年代」シンギュラリティに備える34のリスト///落合陽一著/大和書房
なにしてあそぶ?///パット=ハッチンスさく/偕成社
にじのピラミッド/アンパンマンプチシアター//やなせたかし作・絵/フレーベル館
これなあに : 英語つき/日本のえほん//星灯社絵/学研プラス
よんでみよう///ごとうゆうか著/岩崎書店
こんくんのおんがくはっぴょうかい : つんつくむらのおはなし/講談社の創作絵本//たしろち/講談社
おまつりのねがいごと : つんつくむらのおはなし/講談社の創作絵本//たしろちさと作/講談
おわりに
HTMLの知識もPythonの知識もBeautifulSoupの知識も中途半端だったけど、検索しながらやったら、まあまあなんとかなった。
このあと、ブクログとかスプレッドシートに入力するプログラムを書きたい。
参考
ログイン
【Python3】ログイン機能付サイトでスクレイピング【requests】【BeautifulSoup】 - Qiita
Pythonでのウェブサイトへのログイン - Qiita
いろいろ取得
PythonとBeautiful Soupでスクレイピング - Qiita
Beautiful Soupを使ってスクレイピング - Qiita
python3でwebスクレイピング(Beautiful Soup) - Qiita
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
[Python] 何度も調べてしまうリスト操作をまとめてみた - YoheiM .NET