LoginSignup
3
2

More than 1 year has passed since last update.

APIもScrapyでアクセスできるんですよ

Last updated at Posted at 2021-12-17

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のアクセスもできるようになります。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2