Python Selenium スクレイピング

【Python】メリカリの検索結果から商品名・価格・URLをSeleniumで取得するサンプルプログラムを作ってみた

この記事は約5分で読めます。

 

案件でメルカリの商品リストの内容をスクレイピングしたいという依頼があったので、サンプルコードを作ってみました。

 

前準備

 

メルカリの商品情報はJSで動的生成されているため、requestsのスクレイピングでは200が返ってくるものの商品情報をうまくスクレイピングできません。

 

なので、Seleniumというブラウザを自動操作するツールを使用する必要があります。導入方法については以下の記事で解説しています。

 

参考記事:【Python】Seleniumで使用するWebDriverの更新を自動化してコードの挙動を安定させる

 

 

スポンサーリンク
スポンサーリンク

Python+Seleniumでメルカリの商品情報の取得を自動化する

 

import subprocess 
from selenium import webdriver 
from webdriver_manager.chrome import ChromeDriverManager 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import chromedriver_binary
import time

cmd = 'pip install --upgrade chromedriver_binary' 
res = subprocess.call(cmd, shell=True) 
driver = webdriver.Chrome(ChromeDriverManager().install()) 
driver.set_window_size('1200','1000') 
# url = 'https://www.mgstage.com/' 
# d = DesiredCapabilities.CHROME 
# d['goog:loggingPrefs'] = { 'performance': 'ALL' }
# driver = webdriver.Chrome(desired_capabilities=d) 
# driver.get(url)

def get_source_from_page(driver, page):
    try:
        driver.get(page)
        time.sleep(10)
        page_source = driver.page_source
        return page_source
    except Exception as e:
        print("Exception¥n" + traceback.format_exc())
        return None

def get_data_from_source(source):
    soup = BeautifulSoup(source, 'html.parser')
    try:
        info = []
        myid = soup.find_all(class_='ItemGrid__ItemGridCell-sc-14pfel3-1 iYYoci')
        for tag in myid:
            print('タグ:',tag.find(class_='ItemGrid__StyledThumbnailLink-sc-14pfel3-2 gVKnJ'))
            print('↓は上のタグから抽出した情報')
            name = tag.find(class_='ItemGrid__StyledThumbnailLink-sc-14pfel3-2 gVKnJ').find('mer-item-thumbnail').get('item-name')
            price = tag.find(class_='ItemGrid__StyledThumbnailLink-sc-14pfel3-2 gVKnJ').find('mer-item-thumbnail').get('price')
            url_path = tag.find(class_='ItemGrid__StyledThumbnailLink-sc-14pfel3-2 gVKnJ').get('href')
            print('商品名:', name)
            print('価格:', price)
            print('個別ページリンク:', url_path)
            print('---------------------------')
            info.append([name, price, url_path])
        return info
        
    except Exception as e:
        print("Exception¥n" + traceback.format_exc())
        return None



page = "https://jp.mercari.com/search?keyword=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B5%E3%83%AA%E3%83%BC%20%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88&price_min=1500&item_condition_id=1&status=sold_out"
source = get_source_from_page(driver, page)
data = get_data_from_source(source)
print('処理完了!')
print(data)

 

まあメルカリはちゃんとしたテック企業なので自動化ツール対策も万全でしょうし、これだけで大量のスクレイピングは難しいと思います。安定的に動作するプログラムを組むのであれば、通信を解析してAPIをハックするか、プロキシやIPを切り替える処理も必要になると思います

 

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

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