Pythonで取得した画像が表示されない場合の対処法
Pythonで画像をクローリングする場合、クローリング結果に画像が表示されない場合、以下の原因と解決方法が考えられます。
- リンクされた画像に問題があります。画像リンクが正しいかどうかを確認し、リンクが有効な画像リソースを指していることを確認してください。
- UserAgentヘッダがない場合: WebサイトによってはUserAgentヘッダを元にリクエスト元の判別を行なっており、UserAgentヘッダが指定されていない場合、またはデフォルトのUserAgentヘッダを利用している場合、サーバから画像を返却拒否される場合があります。適切なUserAgentヘッダを設定することで、ブラウザによるリクエストをシミュレートしてみてください。
- import requestsheaders = {
‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3′
}image_url = ‘http://example.com/image.jpg’
res = requests.get(image_url, headers=headers)
- 盗用リンクの防止設定:一部の Web サイトでは盗用リンクの防止設定がされており、指定された Web ページからのリクエストでしか画像が表示されないようになっています。Python スクリプトで画像をリクエストすると、画像が表示されなくなる可能性があります。リクエストに Referrer ヘッダを追加して、リクエスト元の指定を試してください。
- ネイティブな日本語に翻訳した文は次のとおりです。headers = {
‘Referer’: ‘https://www.example.com’
}response = requests.get(image_url, headers=headers)
- JavaScriptでレンダリングされたページ:一部のウェブページではコンテンツがJavaScriptで動的に生成されていて、Pythonで静的なHTMLのみをクロールすると、JavaScriptで生成された画像を取得できない場合があります。Seleniumなどのツールを使用し、ブラウザの動作をシミュレートして、ページ全体を読み込んで画像を取得することを検討してください。
- 画像が隠蔽または暗号化されています: 一部のウェブサイトでは画像リソースが隠蔽または暗号化されており、復号化アルゴリズムまたはその他の方法を使用して実際の画像リンクを取得する必要があります。この場合は、ウェブサイトの暗号化方式を具体的に分析し、復号ロジックを作成する必要があります。
一般的な原因と対処方法は、上記のものを参考に具体的には各自の環境に応じたデバッグや確認が必要になるため状況に応じて変わることがあります。