chatGPTでコンテンツを量産しようとした話
まず初めにはopen AI APIでどんな回答が返ってくるのかを試しました。
APIの場合はn, temperatureなどのオプションのパラメータがあって何が最適なのかを探る必要があります
回答内容はJSONで返して来てほしいと質問するとその通りJSONで返ってきます
さすが噂のchatGPTと思いきや、JSONのフォーマットが一定ではなく、回答の度にフォーマットが違ってきます
2023年3月時点でググると同じようにJSONのフォーマットをどうやってKeepするかの質問がされていました。
どのページを見ても、いい回答がありませんでした。
open AI APIとopen AI chatでは質が違う
JSONのフォーマットが一定じゃないのに加えて、APIの回答内容とchatGPTでの回答内容が異なり質も異なっている事に気づきました
chatGPTの方が回答の質が高く、フォーマットも安定していました。
なので、open APIで実装するより、chatGPTでスクレイピングした方が質的に現実的かと思いました。
chatGPTでなぜ質が違うのかを聞くと遠回しに有料版のAPIを勧められたので、無料版のopen APIで事足りるほどの質にしてしまうとoopen AIの商売が成り立たなくなってしまうという事もあるかと思います。
なのでchatGPTをスクレインピングしてコンテンツを大量生成するという方針に変更しました
はじめ開発環境的に自前のPCを汚したくなかったので、ScriptAutoRunnerでJSでスクレインピングをしていた
Dockerでseleniumをインストールする方法を検索したけども、可能ではあるが現実的ではないくらいこねくり回さないといけないような記事ばっかでした。
それであれば時間もかかってしまうという事で経験のあるScriptAutoRunnerにしました
方法としてはChromeの拡張機能を開発しても考えたけども、そこまで開発してのリターンがそこまで得られそうになかったと思ったので拡張機能の開発はやめました。
拡張機能ではPCのファイルをインタラクティブなしにJS上でインポート・エクスポートが可能であれば大きなメリットだと思ったのですが、調べた限りは無理っぽかったので、使ったことがある実績のあるScriptAutoRunnerでスクレイピングを試みる事にしました
ScriptAutoRunnerはただのJSを追加しただけの事なので、SQLでDBにアクセスもできなければダウンロード、アップロードも自動ではできない
そういう理由があってデータのやり取りが必要な時はJSONPでデータのやり取りをせざるを得ないです
なので、JSONPでアクセスできるように自分自身でAPIを作成して、尚且つサーバーサイド側でAccess-Control-Allow-Originの設定しないと行けない
設定しても全然効かないので、調べた結果JSONPのアクセス先がHTMLファイルなので、このように記載しないといけなかったみ対でした
これでJSONPでopenAIのサイトに入ってもアクセスしてデータ取得できるようになりました
これでスクレインピングしてテキストエリアにJSONPから取得できた値を入れるるように試みます。
しかし、openAIのサイトは、はじめのレンダリングではどのHTMLもなくJSで生成されているのでスクレイピングするには待たないといけない作りになっていました
時間はかかったもののなとかテキストエリアに取得したデータを入力する所までできました
しかし、サブミットボタンの取得ができず、chromeのCSSセレクタ、xpathで取得してもボタンが20個取得されてしまいます
JSで、その20個全てをclickするようにコーディングするとなぜか評価のサブミットのボタンも発火してしまいます。
適切なサブミットボタンを探して数時間かかっても見つけられず、諦める事にしました。
諦めた原因はサブミットボタンですが、それ以外にもJSは非同期で順序毎に処理してくれないので、やりづらさも感じていました。
Async, promise, とかを駆使すればと記載はあるのですが、なかなか上手く機能せず、結局settimeoutとかを使う事になってしまいました。
Seleniumであればスクレイピング専用のツールなので、質問ボタンのsubmitボタンをクリックできると思い、結局Seleniumの環境を構築することにしました。
Pythonなので、wait系の関数も使いやすかったです。
key_pressed = input('Press ENTER to continue: ')
このように実装すれば、ENTER押すまでは次に進まず待ってくれるので、それはありがたい機能ではあります。
JSにもこのようなWAIT系の機能があればどれだけ楽か。。(自分が知らないだけかも)
Seleniumのためだけにインストールしたのは結局1つだけの以下のコマンドのみです。
pip3 install selenium
ChromeドライバーとかFirefoxドライバーなどはダウンロードして適当な所に置いて、プログラミングのパスで指定するだけなので、
当初、開発環境が汚れてしまうという程の事ではなかったです。
でもこれにDBのアクセスであったり、開発が進んでいけば、いろいろなツールやライブラリをインストールしなければいけないかもしれませんが。
Seleniumの場合はログインしてからのみの実装ができないので、driver.add_cookieでちまちまとログイン後のクッキーを持たせる事にしました。
ようやく全てのクッキーの設定をして、いざアクセスしてもログイン画面にすら進めることができないまま、橋にも棒にも引っかからない状態に陥りました。
スクレイピングにはよほど用心しているらしく、さまざまな部分でスクレイピングできないような実装がされてるように見えました。
有料のAPIでの売上がビジネスモデルなので、無料でスクレイピングを簡単にされてしまったらビジネスが成り立たないので、基本的にはスクレイピングできないようになっていると考えた方がいいかとも思いました。
スクレイピングとしてはSelenium(Python)は環境構築に時間がかかるのでSeleniumよりもJSでのスクレインピングを極めた方がいいのではと今回の事で思いました。
スクレイピングしやすいようにScriptAutoRunnerの外部コード読み込みでjQueryを読み込んでjQueryベースの取得方法をしていますが、いつも読み込む時の順番、非同期などで詰まってしまうので、jQueryなしでスクレイピングした方がいいのではとも思いました。
Seleniumのデメリット > 環境構築に時間がかかる
jQueryなしのスクレイピングを極めた方がいいかも
登録日:
更新日: