FANZAのスクレイピングで年齢確認を突破する方法

アダルトアフィリエイトをやっていると、商品の情報をスクレイピングで取得したい、というようなことがあるかと思います。

提供されている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の年齢確認突破がメインのお話なので、そのあたりは適宜置き換えて使ってみてください!!

コメント

  1. 通りすがり より:

    どうしてもFANZAのHTMLが取得できず、何日もムダにしていました。
    このページのおかげでスクレピングができて、たいへん助かりました!