人間っぽいふるまいをするスクレイピングを検討した話
前提:利用規約に違反しないこと 前提として利用規約に違反する行為はやめたほうが良いと考えています。 法的に訴えられても文句は言えないですし。 多くの人が利用しているamazonなども利用規約で禁止しているので、スクレイピングをする際はしっかりと利用規約を読んだうえで行ってください。許可が下りれば問題ないとは思いますが。 サイト側のスクレイピング対策 本題に入ります。 サイト側でスクレイピングを弾く設定がいくつか存在します。例えばユーザーっぽくないふるまいでサイトにアクセスした場合。あるいは特定のサイトを経由しないと見れないURLに直接アクセスした場合。ゆうまでもなく連続でいろんなURLにアクセスした場合。 連続でアクセスされるとサーバーに負荷がかかるので、これが弾かれるのは想像に難くないと思います。 スクレイピング対策を避ける方法 ただ、スクレイピングするされた場合、上記のような特徴が存在します。 この辺はアクセスログを監視すると見れるかと思います。おそらくですが。 では人間っぽくふるまうにはどうしたらよいか調べた中で書いてみます。 一応言語はpythonを使います。他の言語でもできるかと思うので参考程度にはなるかと思います。 Pythonでのスクレイピング基礎 一般的にpythonでのスクレイピングではrequestsモジュールを使います。他にもseleniumやpyppeteerなどがありますが、一旦requestsを使っていきます。 インストールはpipを使います。 pip install requests もしpythonのバージョンなどで分けてる場合はこちら py -3.12 -m pip install requests インストールが終わったらアクセスしてみましょう。今回は私のサイトにアクセスしてみます。 import requests response = requests.get('https://xainome.blog/’) print(response.text) こうするとHTMLの中身を取得することができます。 そこから取得したい情報があればBeautifulSoupを使って要素を取り出してみましょう。まずはインストール pip install beautifulsoup4 実際のアクセスとHTMLの解析 インストールができたらHTMLを解析します。 from bs4 import BeautifulSoup soup = BeautifulSoup(html_parse, 'html.parser') これで解析の準備ができました。解析の話は本題とそれますのでここまでにしようと思います。 解析やHTMLの情報取得に興味があれば調べてもいいですし、生成AIに聞いてみるでもいいと思います。このようなコード、銘柄、市場などが一覧で取得することができます。もちろんAPIを使うという手もありますが。 リクエストヘッダーの設定 実は通常のリクエストを送る場合ユーザーではなく、言語別のリクエストを送っていることになります。 リクエストにはRequests Headersというものが設定できます。これは私たちがPCやスマホでサイトにアクセスするときも送信されています。 まずは設定してみます。 headers = { 'User-agent' = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36' } response = requests.get(search_url, headers=headers) こんな感じで設定します。特に何も設定しなかった場合、‘python-requests/2.25.1’という設定で送られるみたいです。恐らくjsやGoとかでも似たような設定になるかと思います。 ...