オンラインで欲しい物を安く手に入れたり、不必要になったものを売ったりするのに便利なアプリがメルカリです。
メルカリとは、オンライン上のフリーマーケットのことで、家具や服、などの日用品から電化製品など様々な商品が売買されています。
「欲しい商品を少しでも安く買いたい。」「要らなくなったものを少しでも高く売りたい」など、考えている方はぜひ使っていただきたいアプリです。
そこで今回作成したプログラムは、メルカリのトピックスから、ピックアップされた商品を取得して、商品名と画像を保存するプログラムを作成してみました。
ピックアップ商品を確認することで、今どんな商品が売られているのか、どんな商品をメルカリ自体がおすすめしてくれるのかがわかります。
そこで今回は、ピックアップ商品の確認を、Pythonで行えるようにしてみましたので以下のコードをそのまま使うでもよし、Herokuを使って、毎日自動で行ってくれるようにするでもいいです。
公開したコードをご自身で改良するもよしなので、ぜひ使ってみてください!
メルカリ商品画像自動取得コード全貌【コピペOK】
import requests
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
import os
url = "https://jp.mercari.com/topics"
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get(url)
time.sleep(2)
title = browser.find_element_by_class_name("layout__SectionHeading-sc-1lyi7xi-5").text
print(title)
os.makedirs(str(title)+"画像フォルダ")
for section in browser.find_elements_by_css_selector("section.layout__StyledSection-sc-1lyi7xi-7 > section.cXuPtI"):
print(section.find_element_by_css_selector("h2").text)
print(" ")
Products = section.find_elements_by_css_selector('div.helper__Grid-sc-1vgvlgl-1 > a.ItemRow__LinkWithInlineFlex-sc-1xuhjci-8')
for Product in Products:
try:
Product_name = Product.find_element_by_css_selector('mer-item-thumbnail').get_attribute('item-name')
print(Product_name)
Product_img = Product.find_element_by_css_selector('mer-item-thumbnail[item-name="'+ Product_name +'"]').get_attribute('src')
res_img = requests.get(Product_img)
with open(str(title)+"画像フォルダ/" + "{}.jpg".format(Product_name), "wb") as f:
f.write(res_img.content)
except:
print("エラーで画像が開けませんでした。")
continue
print(" ")
time.sleep(0.1)
print("★★★★★★★★★★★★★★★★★★")
print("処理が完了しました")
メルカリ商品画像自動保存コード解説
ここからは今回作成したプログラムがどんな構成になっているのかを解説していきます。
ライブラリをインポート
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
import os
今回使ったライブラリは5つです。
それぞれの用途を簡単にまとめるとこんな感じ。
- requests 👉 URLにアクセスするライブラリ(今回は画像ダウンロードに使う)
- selenium 👉 ブラウザを自動操作するライブラリ
- webdriver_manager 👉 ブラウザを起動するためのライブラリ
- time 👉 小休憩を挟むためのライブラリ
- os 👉 ファイル操作をするためのライブラリ
これらを使って今回やっていきたいのがだいたいステップ
メルカリにアクセス
url = "https://jp.mercari.com/topics"
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get(url)
メルカリがおすすめの商品を毎日ピックアップしてくれているので、ピックアップされている商品がどんなジャンルの商品かを確認できるページにアクセスします。
url = "https://jp.mercari.com/topics" で url を指定しておきます。
次に webdriver.Chrome(ChromeDriverManager().install()) でブラウザを起動、 browser.get(url) で url アクセスします。
タイトルの取得
time.sleep(2)
title = browser.find_element_by_class_name("layout__SectionHeading-sc-1lyi7xi-5").text
print(title)
os.makedirs(str(title)+"画像フォルダ")
time.sleep(2) で、URLにアクセスするのを待つために、2秒間小休憩を入れています。
browser.find_element_by_class_name で要素を指定して、.text で中のテキストを取得し、それを title に格納し、print() で表示させています。
os.makedirs(str(title)+"画像フォルダ")
os.makedirs() で新規フォルダを作成できるので、「タイトル名+画像フォルダ」 をつけて新規フォルダを作成しています。
トピックのタイトルを取得する
for section in browser.find_elements_by_css_selector("section.layout__StyledSection-sc-1lyi7xi-7 > section.cXuPtI"):
print(section.find_element_by_css_selector("h2").text)
print(" ")
browser.find_elements_by_css_selector でしている範囲は画像の部分で、その中から、h2 タグをすべて取得しています。
for文 を使って、複数取得した h2タグ の中から、1つを選択し、処理を実行する、処理が終わったら、次の処理を実行する。といった繰り返しを行っていきます。
h2タグには、ピックアップされている商品のカテゴリが格納されているので、一応取得していますが、最終的にダウンロードして保存するときには使わないので、補足です。
商品名と画像を取得して、ダウンロードする
Products = section.find_elements_by_css_selector('div.helper__Grid-sc-1vgvlgl-1 > a.ItemRow__LinkWithInlineFlex-sc-1xuhjci-8')
for Product in Products:
try:
Product_name = Product.find_element_by_css_selector('mer-item-thumbnail').get_attribute('item-name')
print(Product_name)
Product_img = Product.find_element_by_css_selector('mer-item-thumbnail[item-name="'+ Product_name +'"]').get_attribute('src')
res_img = requests.get(Product_img)
with open(str(title)+"画像フォルダ/" + "{}.jpg".format(Product_name), "wb") as f:
f.write(res_img.content)
except:
print("エラーで画像が開けませんでした。")
continue
print(" ")
time.sleep(0.1)
print("★★★★★★★★★★★★★★★★★★")
print("処理が完了しました")
Products = section.find_elements_by_css_selector('div.helper__Grid-sc-1vgvlgl-1 > a.ItemRow__LinkWithInlineFlex-sc-1xuhjci-8')
では、商品情報を複数格納しています。
複数格納した商品情報の中から1つ取り出して処理を行うのが、おなじみの for文 です。
Product_name = Product.find_element_by_css_selector('mer-item-thumbnail').get_attribute('item-name')
で商品名を取り出して、Product_name に格納しています。
Product_img = Product.find_element_by_css_selector('mer-item-thumbnail[item-name="'+ Product_name +'"]').get_attribute('src')
では、商品の画像のURLを取得して、 Product_img に格納しています。
requests を使って画像のURLにアクセスして、それを保存します。
with open(str(title)+"画像フォルダ/" + "{}.jpg".format(Product_name), "wb") as f:
f.write(res_img.content)
with open() で新しくファイルを作成して、f.write() で画像を保存しています。
保険の小休憩を入れて終わり。
メルカリは利用規約でスクレイピングを禁止している?
メルカリガイドを見てみると、以下のことが禁止されていました。
- 弊社が提供するインターフェイスとは別の手法を用いてサービスにアクセスすること
- 弊社が提供するサービスに繋がっているサーバーやネットワークに対して悪影響を及ぼすこと
規約違反っぽいですね。
なのでコードは載せましたが、使うか使わないかは自己責任でお願いします。
まとめ
今回ご用意したのは、メルカリのおすすめ商品を一気に画像保存できるプログラムです。
保存した画像を、画像検索すると、意外ともっと安い仕入先が見つけられたり、メルカリで売っているよりも高く売られている他のショップサイトがあったり。
使いみちはたくさんあります。
他にもこんなプログラムを作成してほしい!
ここがわからない等があれば、DM等でご連絡ください。
こんな感じのプログラムも作成してますので参考までに見てみてください!