ScrapyでPython2から3へバージョンアップしたい

Lambda で使用中の Scrapy のバージョンは 1.8。リリースノートを見ると、Python 3.5 – 3.8 をサポートしている。

https://docs.scrapy.org/en/latest/news.html#scrapy-2-0-0-2020-03-03

なのでまずは Docker のイメージを Python 3.5 にして試す。と思ったが、lambci/lambda は Python 3.6 以降しかない様子。 一旦レイヤーを作り直す。

rm -rf lambda-layer/python
docker run --rm -v "$PWD":/var/task lambci/lambda:build-python3.6 pip install -r requirements.txt -t lambda-layer/python

Python 2 → 3 で構文が違う箇所でエラーになるはずだが、とりあえずそのまま動かしてみる。

docker run --rm -v "$PWD":/var/task:ro,delegated -v "$PWD"/lambda-layer:/opt:ro,delegated lambci/lambda:python3.6 lambda_function.lambda_handler

シンタックスエラー。

item['price'] = int(re.sub(ur'[ ¥¥,\n]', '', price)) 
 SyntaxError: invalid syntax

調べてみると Python 3 では ur は使えないらしい。

Python 2.x の raw unicode リテラルが Python 3.x とは異なる振る舞いをするため、 'ur' 構文はサポートされません。

Python 言語リファレンス 2.4.1. 文字列およびバイト列リテラル

Python 3 でサポートされていないのは、raw unicode リテラルの中に \u や \U でコードポイントを指定する記述らしい。使っていなかったので ur を r に変えるだけで OK だった。他には修正不要で 3.6 で動いた。

コメントを残す