ヤフオク(Yahoo!オークション)のページをWebスクレイピングするのに必要な情報をまとめた(最終更新日:2015.3.13)
はじめに
Yahoo!オークションの商品の落札価格の予測をしようと思い、過去の落札商品の値段のデータを数百件分取得する必要があった。この為の手法としてWeb APIを使う方法や、Webスクレイピングと言うWebページの特定の部分を削り出す方法がある。そこでYahoo!オークションのページをWebスクレイピングするのに情報をまとめてみた。
準備するべき環境
- LAMP環境やXAMPPなどPHPが実行できるもの
- PHP Simple HTML DOM Parser(ソースコードはこちら)
- Ruby,Pythonなどの言語でWebスクレイピングのできる環境が整っている
ヤフオクページの検索クエリの内訳
まずヤフオクのサイト(http://closedsearch.auctions.yahoo.co.jp/closedsearch?select=XX&ei=UTF-8&va=XX)の?マーク以後に様々なクエリが出て来るので、このクエリが何を示すかについて調べた。万一間違っている箇所があったら、是非とも報告して欲しい。
クエリ名 | 内訳 |
va | 検索ワード |
ei | 文字コード(utf-8など) |
slider | 左の検索条件。1から順に、「検索条件」「落札価格」「商品の状態」「出品者」 |
n | 検索件数(20,50,100の順) |
b | n*(現在のページ数)+1の値 要は各ページの開始位置(件目) |
o1 | aが昇順(order by asc)、dが降順(order by desc) |
s1 | cが落札価格が選択されている状態、bidsが入札状況、endが終了日時 |
select | 別表参照 |
クエリselectにおけるクエリパラメーターについて
パラメーターの値 | 内訳 | パラメーターの値 | 内訳 |
24 | 開始価格が安い順 | 03 | 入札の多い順 |
25 | 開始価格が高い順 | 04 | 入札の少ない順 |
01 | 落札価格の安い順 | 05 | 終了日時の遠い順 |
02 | 落札価格の高い順 | 06 | 終了日時が近い順 |
落札価格等に対応するhtmlクラスの場所
次に落札価格のみ切り取りたいと言った場合に必要なのが、「落札価格のテキストは、htmlのどのクラスのテキストか?」と言う情報である。これをまとめたのが下の表になる。
こういう特定のクラスを探すにあたりfirefoxのfirebugなどを使って、クラスを特定していくとやりやすい。例えば落札価格の情報が知りたければ「.ePrice」クラスに着目すれば良いことが分かる。
内訳 | htmlのクラス/タグ名(1階層目) | htmlのクラス/タグ名(2階層目) | htmlのクラス/タグ名(3階層目) |
商品名 | a1 | h3 | a |
落札価格 | pr2 | ePrice | |
開始価格 | pr2 | sPrice | |
入札 | bi | a | |
終了日時(日付) | pr2 | d | |
終了日時(時間) | pr2 | t |
サンプルPHPソースコード
次は各項目をPHPでスクレイピングするのに、どう設定すれば良いのかをまとめたソースコードを紹介する。
ヤフオク全体を見て、例えば終了時間の「.t」など別の場所でクラス指定されている場合もあり、親クラスと言うべき「.pr2」から場所指定をした方が確実にスクレイピングしやすい。この辺を見極められるかが肝心な場合も多い。
ソースコード(2015.3.13に追記)
<?php
require_once("simple_html_dom.php");
$yahoo_url="http://closedsearch.auctions.yahoo.co.jp/closedsearch?va=3DS&ei=UTF-8&b=1";
$html = file_get_html($yahoo_url);
/*商品名を読む場合(2015.3.13に追記)*/
$a1_h3_a = $html->find('.a1',0)->find('h3',0)->find('a',0)->plaintext;
/*落札価格と開始価格を読む場合*/
/*クラス「.pr2」の偶数(2N)番目に落札価格が格納*/
$pr2_Price =$html->find(".pr2",0);//終了日時を指し示すクラス
$ePrice = $pr2_Price->find(".ePrice",0)->plaintext;//落札価格
$sPrice = $pr2_Price->find(".sPrice",0)->plaintext;//開始価格
$bi_a = $html->find(".bi",0)->find("a",0)->plaintext;//入札件数
/*終了日時を読む場合*/
/*クラス「.pr2」の奇数(2N+1)番目に終了日時が格納*/
$pr2_endtime =$html->find(".pr2",1);//終了日時を指し示すクラス
$d = $pr2_endtime->find(".d",0)->plaintext;//終了日時(日付)
$t = $pr2_endtime->find(".t",0)->plaintext;//終了時間(時間)
//テスト用に表示するプログラム
print "商品名: ".$a1_h3_a."<br>";
print "落札価格: ".$ePrice."<br>";
print "開始価格: ".$sPrice."<br>";
print "入札件数: ".$bi_a."<br>";
print "終了日時(日付): ".$d."<br>";
print "終了日時(時間): ".$t."<br>";
exit;//念のためここで終了
?>
実行結果(2015.3.13に差し替え)
最後に
今日の記事ではヤフオク!のページをWebスクレイピングするのに必要な情報をまとめてみた。次回は実際に抜き取った情報をどう活用するかについて触れたい。
Author And Source
この問題について(ヤフオク(Yahoo!オークション)のページをWebスクレイピングするのに必要な情報をまとめた(最終更新日:2015.3.13)), 我々は、より多くの情報をここで見つけました https://qiita.com/ryuichi_matsumoto/items/eb83ace631ea7c6092f3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .