アダルトアフィリエイトをやっていると、商品の情報をスクレイピングで取得したい、というようなことがあるかと思います。
提供されているAPIでは不足している情報が欲しかったり、サイトを自動化させるプログラムを作っていたり・・・
FANZAの商品情報もスクレイピングで取得することが可能なのですが、実際やってみると上手くいきません。
なぜなら、年齢確認のクッションページが表示されてしまうからです。
商品のURLを叩いているのにこのようはページが表示されるため、正しい情報が取得できません。
解決策としては、ページの内容を取得するときに、Cookieの情報を付与するようにします。
DMMの年齢確認Cookieを調べる
年齢確認をおこなったかどうかはCookieに保存されます。
まずはDMMの年齢確認に使われているCookieを調べてみます。
調べ方はChromeを使うと簡単にできます。
年齢確認をおこなった後、URLの横の鍵アイコンをクリックしてメニューを表示させ、Cookieの項目を選択します。
一覧からdmm.co.jpを選択し、Cookieを開きます。
この中のage_check_doneが年齢確認用のCookieの値になります(たぶん)
名前やコンテンツは皆さん共通かと思いますが、そのうち変更になる可能性もあります。その時はここからそれっぽい名前を探してみましょう。
PHPでCookieを使ってページ情報を取得するコード
先程のCookieの内容を使って、FANZAの年齢確認ページを突破しつつ情報を取得するサンプルコードを紹介します。
テストに使用した環境は以下のとおり
- PHP7.4.25
- phpQuery(スクレイピング)
- file_get_contents(コンテンツの取得)
<?php
require_once("./phpQuery-onefile.php");
//コンテンツ取得先
$url = "https://www.dmm.co.jp/○○○○○○○○/";
//ヘッダーの設定
$header = array(
"Content-Type: application/x-www-form-urlencoded",
);
//ヘッダーにCOOKIE情報を追加
$array_cookie[] = "Cookie: age_check_done=1";
$header = array_merge($header, $array_cookie);
//オプション設定
$options =array(
'http' =>array(
'method' => "GET",
'header' => implode("\r\n", $header),
)
);
//コンテンツ取得
$contents = file_get_contents($url, false, stream_context_create($options));
//h1タグを表示してみる
echo phpQuery::newDocument($contents)->find("h1")->text();
こんな感じのコードでちゃんと取得できるはず。
ぶっちゃけネットで調べたコードの継ぎ接ぎなので、あまり詳しくは理解していません(´・ω・`)w
そもそもphpQuery自体が10年以上更新されておらずおすすめできなかったり、file_get_contentsが重くスクレイピングにはおすすめできなかったり・・・
まぁ、ここはFANZAの年齢確認突破がメインのお話なので、そのあたりは適宜置き換えて使ってみてください!!
コメント
どうしてもFANZAのHTMLが取得できず、何日もムダにしていました。
このページのおかげでスクレピングができて、たいへん助かりました!
お役に立てて良かったです(´・ω・`)