Scrapyを使う
WebスクレイピングのフレームワークであるPythonのScrapyはAPIのアクセスにも使用できます。
やってみましょう。
やってみる!
とりあえずアクセストークンを取得しないと話が始まらないので取得します。
それから、Scrapyをインストールして、雛形を作成します。
python3 -m venv .venv
source .venv/bin/activate
pip install scrapy
scrapy startproject freee_scrapy
cd freee_scrapy/
scrapy genspider scrapy_freee_api_spider api.freee.co.jp
そしたら、あとはSpiderのコードを書くだけです。
今回は、お触りだけなので「事業所一覧の取得」をやってみます。
scrapy_freee_api_spider.py
import scrapy
from scrapy.http import JsonRequest
import json
class ScrapyFreeeApiSpiderSpider(scrapy.Spider):
name = 'scrapy_freee_api_spider'
allowed_domains = ['api.freee.co.jp']
def start_requests(self):
base_url = "https://api.freee.co.jp/api/1/companies"
request_headers = {
"Authorization" : "Bearer アクセストークン",
"X-Api-Version" : "2020-06-15"
}
yield JsonRequest(url=base_url, headers=request_headers, callback=self.parse)
def parse(self, response):
jsonresponse = json.loads(response.text)
self.logger.info(jsonresponse)
※settings.pyでROBOTSTXT_OBEYをコメントアウトしてください。
settings.py
# ROBOTSTXT_OBEY = True
実行します。
scrapy crawl scrapy_freee_api_spider
事業所一覧が取れました。
2021-12-17 23:55:50 [scrapy_freee_api_spider] INFO: {'companies': [{'id': ******, 'name': '', 'name_kana': '', 'display_name': 'ブライトシステム', 'role': 'admin'}, {'id': ******, 'name': None, 'name_kana': None, 'display_name': '開発用テスト事業所', 'role': 'admin'}]}
解説
今回はScrapyでJsonRequest
を使用しました。
これを使用すると、ヘッダーにAccept: application/json, text/javascript, */*; q=0.01
を送信するようになります。
start_requests
からJsonRequest
を呼び出すようにしています。
あとは、json.loads
で辞書形式に変換してしまえば、使いやすいでしょう。
Scrapyを使うとシンプルにAPIのアクセスもできるようになります。