やりたいこと
- メルカリの検索条件を指定して検索、出力されたページの商品名と出品金額を取得したい
- Chromeのヘッドレスモードを使用して取得したい
まずは普通に取得してみる
mercari.py
# メルカリ上で動的レンダリングされた商品情報を取得し、すべてのページから商品名、価格、タイトルを取得する。
from selenium import webdriver
from time import sleep
from selenium.common.exceptions import *
options = webdriver.ChromeOptions()
# options.add_argument('--headless')
browser = webdriver.Chrome('chromedriver.exe',options=options)
# mercari:指定条件を検索したURLにアクセス
url = 'https://jp.mercari.com/search?status=on_sale&page=1&t1_category_id=5&category_id=5'
# アクセスしたらちょっと待ってHTMLソースを出力する。
browser.get(url)
sleep(3)
print(browser.page_source)
実行結果(抜粋)
実行結果
<li data-testid="item-cell" class="ItemGrid__ItemGridCell-sc-14pfel3-1 iYYoci">
<a class="ItemGrid__StyledThumbnailLink-sc-14pfel3-2 gVKnJ" href="/item/《商品ID》">
<mer-item-thumbnail item-name="《取得したい商品名》" src="https://static.mercdn.net/c!/w=240/thumb/photos/《商品ID》_1.jpg?1633771836" alt="《取得したい商品名》のサムネイル" size="fluid" price="1000" radius="" mer-defined="">
</mer-item-thumbnail>
</a>
</li>
楽勝。
ヘッドレスモードを使用して再実行する
実行結果
<li data-testid="item-cell" class="ItemGrid__ItemGridCell-sc-14pfel3-1 iYYoci">
<a class="ItemGrid__StyledThumbnailLink-sc-14pfel3-2 gVKnJ" href="/item/《商品ID》">
<mer-item-thumbnail src="https://static.mercdn.net/c!/w=240/thumb/photos/《商品ID》_1.jpg?1622755102" alt="のサムネイル" size="fluid" price="1650" mer-defined="">
</mer-item-thumbnail>
</a>
</li>
mercari.pyのoptionsでコメントアウトしていた行を外して実行した結果…
情報が何か足りない…item_name属性が消えてしまった…
ソースコード修正
こちらのサイト によると、Chrome起動時のオプションが足りないっぽいので追記。
mercari.py
# メルカリ上で動的レンダリングされた商品情報を取得し、すべてのページから商品名、価格、タイトルを取得する。
from selenium import webdriver
from time import sleep
from selenium.common.exceptions import *
options = webdriver.ChromeOptions()
options.add_argument('--headless')
# 追記!----------
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-gpu")
options.add_argument(
"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36")
# 追記!----------
browser = webdriver.Chrome('chromedriver.exe',options=options)
# mercari:指定条件を検索したURLにアクセス
url = 'https://jp.mercari.com/search?status=on_sale&page=1&t1_category_id=5&category_id=5'
browser.get(url)
sleep(3)
print(browser.page_source)
実行結果(リトライ)
<li data-testid="item-cell" class="ItemGrid__ItemGridCell-sc-14pfel3-1 iYYoci">
<a class="ItemGrid__StyledThumbnailLink-sc-14pfel3-2 gVKnJ" href="/item/《商品ID》">
<mer-item-thumbnail item-name="《商品名》" src="https://static.mercdn.net/c!/w=240/thumb/photos/《商品ID》_1.jpg?1633817344" alt="《商品名》のサムネイル" size="fluid" price="4480" radius="" mer-defined="">
</mer-item-thumbnail>
</a>
</li>
ヘッドレスモードでも取れた!
あとは、タグ・属性なりから必要な情報を切り出してリスト化してやればミッションコンプリート。
最初はhrefたどってもうひと踏ん張りしないといけないものだと思っていたので軽い修正で助かりました。