ということで、今回はPHPを使ってWebからデータの自動取得を行います。
今までは、お手軽な file_get_contents がよく使われていましたが、
タイムアウト処理が不向きであったりや、なにかとセキュリティの向上で
利用できなくしているレンタルサーバーもあるので、curlを使ってみます。
例として、ヤフーのページを取得後、URLのみを抽出します。
$url = "https://www.yahoo.co.jp/";
$url = "https://weather.yahoo.co.jp/weather/jp/40/8210/40133.html";
$ua = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
//$ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36";
$crl = curl_init();
//curl_setopt($crl, CURLOPT_POST, true);
//curl_setopt($crl, CURLOPT_POSTFIELDS, $param);
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false); // SSLのページはこれがないと読めない
curl_setopt($crl, CURLOPT_URL, $url);
curl_setopt($crl, CURLOPT_USERAGENT, $ua);
curl_setopt($crl, CURLOPT_HEADER, false); // false=ヘッダー表示なし、true=ヘッダー表示あり
curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($crl, CURLOPT_FRESH_CONNECT, true);
curl_setopt($crl, CURLOPT_AUTOREFERER, true);
curl_setopt($crl,CURLOPT_TIMEOUT, 3); // タイムアウト(秒)
$response = curl_exec($crl);
$info = curl_getinfo($crl);
$errorNo = curl_errno($crl);
$code = curl_getinfo($crl, CURLINFO_HTTP_CODE);
//echo $code;
if ($errorNo === CURLE_OK) {
$header_size = curl_getinfo($crl, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size); // headerだけ切り出し
$body = substr($response, $header_size); // bodyだけ切り出し
//var_dump($response);
//var_dump($info);
//echo $header;
//echo $body;
// URLのみ抽出
if (preg_match_all('(https?://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)', $body, $result) !== false) {
foreach ($result[0] as $value) {
print $value . '
';
}
}
}
curl_close($crl);
抽出したURLがこちら。簡単にできますね。
シェルパラボ(システム開発・ソフトウェア作成業務請負)
https://www.chomolungma.biz/
0 件のコメント:
コメントを投稿