【完結編】メルカリをWebスクレイピング03

今回行うこと

前回はメルカリを開いて検索して「新しい順」
でソートするまでを行いました。

【実践編】メルカリをWebスクレイピング02

2022年2月27日

今回は以下を行って完結です!
・表示された内容に対してタイトルや価格を取得する
・何件まで取得するかを確定する
・取得した内容をCSVに保存する

まず最初に完成したコードを記載します。
解説はコードの下で!

表示された内容に対してタイトルや価格を取得する

ここから解説です。
main処理で以下を追加しています。
# 新しい順でソートしたhtml情報をスクレイピングする
get_data_from_source(search_key)

引数で渡している変数
・search_key:検索キーワード
となっています。
その引数を「get_data_from_source」へ渡しています。

def get_data_from_source(search_key)

get_data_from_source関数では
最初に変数を格納しています。

最初に検索したキーワードで引っかかった件数(1ページ目)を取得しています。
これは画面上の件数「999+件」ではなく、
1ページ目に表示されている120件それぞれになります。

今までは単純に要素に対して右クリック > 検証 > xpathのコピーを行っていましたが、
今回のように1ページ目に表示されている件数を取得したい場合はxpathを自分で考える必要があります。
xpathが「//li[contains(@data-testid, ‘item-cell’)]/a」
というのは、
ページ内に表示されている「liタグの中に、de-ta-testid=item-cellの要素からaタグを取得する」
という意味になります。
※ 詳しくは「スクレイピング xpath」などで検索すると解説してくれるサイトが多く表示されるかと思います。
pd_lists = [number.get_attribute(‘href’) for number in numbers]
としている箇所は、「numbers」にはaタグが返ってきていますので
aタグの中にあるhref要素。
つまり詳細ページへのリンクがpd_listsに格納されていきます。
pd_listsをforで回せば、それぞれ詳細ページ飛ぶ。
という流れですね。

詳細ページでは、以下のようにタイトルと料金を取得しています。
タイトルと料金を前回同様に
右クリック > 検証 > xpathをコピーしています。
・pd_title_xpath

・pd_price_xpath
ここは注意が必要です。
「1800」のように料金の項目に
カーソルを当て、右クリック > 検証
を行った場合に上手く取得が出来ません。

画像を参考に、検証ツールで少し上の階層のxpathを取得してあげてください。

取得したhrefのURLより、forで1件1件詳細ページに飛んでいます。

タイトルや料金をそれぞれ格納した後、
urlは、既に詳細ページに入っている状態なので、crrent_urlで取得します。
pd_detail.append([pd_no,search_key, pd_name, pd_price, pd_url])
については、後でcsvファイルに書き込むため、リストに格納していきます。

今回は取得していませんが、詳細ページに記載されている
・カテゴリー
・商品の状態
・配送料の負担
などもxpathのコピーから簡単にスクレイピングが行えるかと思います。

件数を何件取得するかは、以下の処理です。

pd_noは1から始まっているので、4件目が来たらループ終了です。
最後に
save_csv(pd_detail)
でcsvファイルに書き出して完了となります。

def save_csv(pd_detail)

ここは凄く単純です。
流れは以下の通りとなります。
・csvファイルを格納するpathを定義する
・csvファイルへ日付をファイル名に使用したいのでdetetime関数を使用する
・相対パスで格納するpathとファイル名を確定させる

・open関数を使用してcsvファイルの書き込みを行う
・csvは最初にヘッダー部分を固定の文字列で書き込む
・続いてappendしたリストの内容を書き込む

プログラムを実行し、以下のcsvファイルが出力されていたら完成です。

最後の方は大分駆け足になってしまいました!
そして「BeautifulSoup」は使用しなかった、、、w
次はBeautifulSoupを使用したスクレイピング記事を作成したいところです。
メルカリのページはxpathが適宜更新されるようですので、
上手く動作しない場合は要素の取得を最新のものに書き換えて実行してみてください!

最後までお読みくださり、どうもありがとうございました。