More Related Content
Similar to スクレイピングのススメ (20)
More from Tomoki Hasegawa (20)
スクレイピングのススメ
- 5. scrape
【自動】
1. 〔固い物に〕こする、すれる
2. 〔こすって〕キーキーと音を立てる
3. 〔人が〕節約して暮らす
4. 辛うじてやり通す[成し遂げる]
【他動】
1. 〔∼の表面を〕ゴシゴシこする◆∼をきれいにするために行うもの。
2. 〔表面の〕∼をこすり落とす[取る]◆固い物をゴシゴシとこすり
付けて。
3. 〔固い物にこすって〕∼を擦りむく[傷つける]
4. 〔固い物に〕∼をこすり付ける[こすってキーキーと音を立てる]
5. 〔苦労して〕∼をかき集める[かき寄せる]
6. 《コ》〔データなどを〕取得[収集]する◆特に別のプログラムの
出力から、本来とは異なる用途・形式などでデータを抽出すること。
出展: SPACE ALC http://www.alc.co.jp
- 6. 利用例
これを… こうする
array(
(int) 0 => array(
'is-fba' => false,
'shipping' => (int) 257,
'price' => (int) 2001,
'condition' => '中',
'subcondition' => '可',
'seller' => array(
'name' => 'lambdas',
'merchant-id' =>
'A3VELMD24S0ERO'
),
),
- 16. 2.HTMLを整形する
// Tidy Option
$config = array();
// Tidyオブジェクト作成
$tidy = tidy_parse_string($contents, $config, 'shiftjis');
// 整形実行
$tidy->cleanRepair();
// 整形済HTMLを取得
$contents = (string)$tidy;
- 17. 3. HTMLをパースする
• HTMLをXMLとしてパースする。
• 方法はいろいろ。
• PHP標準 … simplexml_load_file()
• HTMLScraping … 文字コードの指定が出来たりして便利。
• Diggin_Scraper などなどその他たくさんの選択肢
• 余談: TidyオブジェクトのままでもNodeを走査すればデータの取
得は可能。
今日はこれ。
- 18. 3.HTMLをパースする
// スクレイピングオブジェクト初期化
$s = new HTMLScraping('/tmp');
// XMLパースする
$data = array(
'body' => $contents,
'headers' => array('content-type' => 'text/html; charset=Shift_JIS',),
'code' => 200,
);
try {
$xml = $s->getXmlObjectFromContents($data);
} catch (Exception $e){
// エラー処理
}
- 20. 4.情報を取り出す
// Xpathを使って配列を取得
$items = $xml->xpath('//div[@class="a-row a-spacing-mini olpOffer"]');
// 配列をループして処理する
$items = array();
foreach ($items as $item){
$price_xml = $item->xpath('//span[contains(@class, olpOfferPrice")]');
$price = intval(str_replace(',', '', $price_xml[0]));
$condition_xml = $item->xpath('//h3[contains(@class, "olpCondition")]');
$condition = trim((string)$condition_xml[0]);
:
$items[] = array( price => $price, condition => $condition, …);
}