_RJ 技術メモ

人生を豊かにする技術を提供する、筋肉

Amazonの商品を文字列検索と切り取りでスクレイピングする

Amazon スクレイピング PHP

概要

Slackで商品名を投稿するとAmazonの商品を返すBotを作るために作成。 面倒だったので、APIXMLパースライブラリも、正規表現も使わずに文字列検索と切り取りのみでのスクレイピング

DOMの構造が変わったらこのプログラムは終わり。 商品によっては発生するバグは修正予定。

ソースコード

<?php

if(!isset($_GET['keyword'])){
    echo 'URL?keyword=検索キーワード';
    die();
}

//ソースの取得
$source = file_get_contents('https://www.amazon.co.jp/s/?url=search-alias%3Daps&field-keywords=' . urlencode($_GET['keyword']));
$item = subStrHtml($source, 'id="result_1"', 'id="result_2"');

//各項目の抜き出し
$title = subStrHtml($item, 's-access-title  a-text-normal">', '</h2>');
$link = subStrHtml(subStrHtml($item, 'a-text-normal" target="_blank"', '</a>'), 'href="', '"><img ');
$image = subStrHtml($item, '<img src="', '" width="160"');
$price = subStrHtml($item, 'a-color-price s-price a-text-bold">', '</span>');
$star = subStrHtml($item, '<span class="a-icon-alt">5つ星のうち ', '</span>');
$prime = subStrHtml($item, '<span class="a-icon-alt">', '</span>');

//出力
echo '<img src="' . $image . '">' . '<br>';
echo '<a href="' . $link . '">' . $title. '</a>' . '<br>';
echo '価格: ' . $price . '<br>';
echo '★' . $star . '<br>';
echo $prime . '<br>';


function subStrHtml($data, $startStr, $endStr){
    $start = mb_strpos($data, $startStr) + mb_strlen($startStr);
    $end = mb_strpos($data, $endStr, $start);
    $result = mb_substr($data, $start, $end - $start);
    return $result;
}

実行結果

Screen Shot 2017-04-03 at 22.13.35.png