0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amazonの注文メールから正規表現で商品リンクを抜き出す

Last updated at Posted at 2020-01-31

ZapierでAmazonの注文メールから商品リンクを抜き出したいケースがあった。正規表現を使って商品リンクだけ抜き出したかったが、Python Regular Expression というPython特有の正規表現だったので苦戦したのでメモ。

作成した正規表現

(https?://www\.amazon\.co\.jp/gp/r\.html\?[\w.-?/%&=:]+_TE_item_image)

注文メールのHTML本文にはhttps://www.amazon.co.jp/gp/r.html?で始まるURLが複数ある。そこで最後に_TE_item_imageが付いているURLだけ抽出してやればOKだった。

正規表現を作成する方法

うまく想定したパターンがマッチしなかったり、正規表現ジェネレータなどでもうまくいかないときはVSCodeなどのエディターの検索機能で1個ずつ必要な正規表現を追加していき、マッチ範囲が伸びていくのを確認しながら作成するのがおすすめ。
スクリーンショット 2020-03-20 15.32.16.png

正規表現検索モードである.*をオンにし、<td class="name"([\s\w=":(]*)のように[]*に正規表現を増やしていく。気になるのは-の後に>を持ってくるとマッチしないことだ。ハイフンは特に正規表現での特殊な意味はなかったと思うのだが、詳しい方がいたら教えて欲しく。


<td class="name"([\s\w></.?&%=":(,);-]*)> ([\w\W]*) </a> <br /> ([\W\w]*) <br /> 販売

基本的な正規表現

\   直後の文字をエスケープ。ただし[]の中ではこれをかかなくても.や?はエスケープされるよう
.   任意の一文字
?   直前の文字もしくはグループが0個か1個。つまりhttpでもマッチするようs?とする
()  グループ。これでくくれば1文字として扱われる。(aaa)?は何もないか、aaaになる。
[] 呼び方不明。この角括弧に含まれるいずれか1文字にマッチ
\w  [0-9A-Za-z_] と同じ意味。半角英数字とアンダーバーにマッチ
*   直前の文字が 0回以上 繰り返す場合にマッチ
+   直前の文字が 1回以上 繰り返す場合にマッチ

Zapierの公式ヘルプによると Extract Pattern でテキストを抽出するには()で囲んでやらねばならない。

In order to have this step return text in its output, you must include a capture group in your regex.

実際のリンク先で最終的にリダイレクトされる商品URLは途中の&T=C&U=以降にクエリーとして付与されている(ただしhttp://でSSL化されていない)ようだったので、更に Extract URL の処理をかませて欲しいURLを抽出した。

参考リンク

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?