Pythonでmercariを用いて商品URLと商品タイトルを取得する

Pythonでmercariを用いて商品URLと商品タイトルを取得してみます。

今回は、メルカリのAPIのようなmercariというライブラリを用います。このライブラリはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.9.13」を使用しています。(Windows10)(pythonランチャーでの確認)

■mercariを用いて商品URLと商品タイトルを取得する

では、早速mercariを用いて商品URLと商品タイトルを取得するスクリプトを書いていきます。

■コード

import mercari

for item in mercari.search("にんじん"):
    print("{} {}".format(item.name, item.productURL))

importでmercariモジュールを呼び出します。その後for文を用いてmercariモジュールを用いてメルカリで検索したキーワードの結果情報を1つずつ取り出してitem内に格納。格納後、print()でitem内の商品URLと商品タイトルを出力させます。今回のキーワードは「にんじん」とします。

■実行・検証

このスクリプトを「mer_test_1.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

Traceback (most recent call last):
  File "C:\Users\user_\mer_test_1.py", line 4, in 
    print("{} {}".format(item.name, item.productURL))
AttributeError: 'Item' object has no attribute 'name'

実行してみると、「AttributeError」というエラーが出力されました。出力された内容を確認してみると、「’Item’ object has no attribute ‘name’(’Item’オブジェクトには属性’name’がありません)」というものでした。今回のコードはこちらのGithubページ(https://github.com/marvinody/mercari/)を参考にしたもので、Item内の商品タイトルの属性を指定するのに「item.name」と表記されていましたが、よく確認してみるとItem内の商品タイトルの属性は「productName」であることが書かれていました。

import mercari

for item in mercari.search("にんじん"):
    print("{} {}".format(item.productName, item.productURL))

そこでスクリプト内のコードを上記のコードに変更しました。

■実行・検証

変更後、スクリプトを「mer_test_2.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

Traceback (most recent call last):
  File "C:\Users\user_\mer_test_2.py", line 3, in 
    for item in mercari.search("にんじん"):
  File "C:\Users\user_\AppData\Roaming\Python\Python39\site-packages\mercari\mercari.py", line 91, in search
    items, has_next_page = fetch(searchURL, data)
  File "C:\Users\user_\AppData\Roaming\Python\Python39\site-packages\mercari\mercari.py", line 73, in fetch
    r.raise_for_status()
  File "C:\Users\user_\AppData\Roaming\Python\Python39\site-packages\requests\models.py", line 953, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://api.mercari.jp/search_index/search?keyword=%E3%81%AB%E3%82%93%E3%81%98%E3%82%93&limit=120&page=1&sort=created_time&order=desc&status=on_sale

実行してみると、今度はメルカリで検索したキーワードの結果情報が取得され、商品URLと商品タイトルを出力させることができました。出力には成功しましたが、「requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url」というエラーが出力される。この原因を調べてみると、401 Unauthorized Errorは、有効な認証資格情報がないクライアントからサーバーに送信された要求を表すもので、可能性としては、特定のクライアントが、動的IP制限同時要求レート制限に達した単一のサーバーで複数回要求したことによるものが挙げられる。

なお、今回出力されたエラー内容に含まれるURL(https://api.mercari.jp/search_index/search?keyword=%E3%81%AB%E3%82%93%E3%81%98%E3%82%93&limit=120&page=1&sort=created_time&order=desc&status=on_sale)にアクセスすると、下記のページが表示される。

このようなページが表示されたが、今回のスクリプトを実行した途中までは商品情報(URLとタイトルなど)を取得できていたのに、突然このページが表示されるということは、リクエストを複数回要求したことで何らかの制限がかけられた可能性は高い。

また、今回使用したmercariというライブラリだが、過度な使用を行うと、メルカリ側で制限がかけられる可能性はじゅうぶんに考えられるので、使用の仕方に注意が必要です。

コメント

タイトルとURLをコピーしました