0
4

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 3 years have passed since last update.

レンダリングされたサイトをスクレイピングしたかった

Last updated at Posted at 2021-10-09

やりたいこと

  • メルカリの検索条件を指定して検索、出力されたページの商品名と出品金額を取得したい
  • 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たどってもうひと踏ん張りしないといけないものだと思っていたので軽い修正で助かりました。

0
4
1

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
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?