質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

808閲覧

pythonで特定のサイトに、requestsでアクセスすると、403エラーになる

nmty

総合スコア19

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

1グッド

1クリップ

投稿2023/05/15 15:23

環境

Python 3.7.6

実現したいこと

以下URL、にrequestsモジュールでアクセスした際、

url = "https://dexscreener.com/"

ステータスコードが、403、と表示されるので、200、を取得したい。

同様に、

url = "https://yahoo.co.jp"

に、にrequestsモジュールでアクセスすると、

ステータスコードは、200、と表示される。

該当のソースコード

python

1import requests 2 3url = "https://dexscreener.com/" 4# url = "https://yahoo.co.jp" 5 6headers = { 7 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36', 8 "Connection": "keep-alive", 9 "Accept": "text/html,application/xhtml+xml,application/xml;", 10 "Referrer": "https://www.google.co.jp", 11 "Accept-Language": "ja;q=1.0", 12} 13 14# サイトからHTMLデータを取得 15response = requests.get(url, headers=headers) 16 17# ステータスコードを表示 18print(response.status_code) 19

気になる点

2つのURLの違いは、

以下、
該当のURLにアクセスした際に最初に表示される画面、のように、
url = "https://dexscreener.com/"、
にアクセスすると、CloudFlareの確認画面が
初回アクセス時に表示されている

該当のURLにアクセスした際に最初に表示される画面(Cloudflareの確認画面?)

イメージ説明
イメージ説明

kzy53を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

おっしゃる通り、特定のウェブサイトに対する初回アクセス時にCloudFlareの確認画面が表示される現象は、ウェブサイトがCloudFlareによるDDoS保護などのセキュリティ機能を利用しているためです。これはサイトの所有者がサイトを不正アクセスや攻撃から保護するために使用する一つの手段です。

そのため、単純なrequestsモジュールを使ったスクレイピングでは、CloudFlareの確認画面を通過することが困難となる場合があります。これは、CloudFlareの確認画面がJavaScriptを実行することでユーザーが本物のブラウザを使用していることを確認しているからです。

この問題を解決するためには、Pythonのrequestsモジュールではなく、JavaScriptを実行できるブラウザ操作ツール(たとえばSeleniumなど)を使用する方法があります。ただし、この方法は通常のrequestsモジュールを使用するよりも複雑で、ブラウザを操作するためのコードを書く必要があります。

もう一つの選択肢は、Cloudflareが提供する確認画面をバイパスするためのPythonライブラリ(たとえば cfscrape など)を使用することです。ただし、この方法も常に有効であるとは限らず、またCloudflareの規約に違反する可能性もあるため、その使用は慎重に行うべきです。

最後に、あなたがスクレイピングを行う理由と目的によっては、サイトの所有者に直接連絡して、スクレイピングを許可してもらうことも一つの方法です。

投稿2023/05/15 20:44

m8aFm77kKU9JuID

総合スコア78

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nmty

2023/05/15 23:59

ご丁寧な回答ありがとうございます。 確かに今回のケースでは、CloudFlareのセキュリティがあるため requestsモジュールを使った単純なアクセスでは難しいと感じました。 cfscrape、初めて聞きました。Cloudflareの規約を確認しながら色々と調べてみます。 ありがとうございました。
guest

0

これはcloudflareのボット対策機能によるものです。
以下のサイトが参考になるかと思います。
https://note.com/kohnoselami/n/n350636e07d3b

投稿2023/05/15 22:50

a.com

総合スコア871

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nmty

2023/05/16 00:02

これはピンポイントで非常に参考になりそうなサイトですね。 値段がかなりしますが、、、色々調べてみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問