hfuob
@hfuob (慎也)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Webスクレイピングで自動画像収集するための画像の要素が取得できない

解決したいこと

WebスクレイピングでPythonを使用し、下記のメルカリのWebページ(URL1,URL2)から画像を自動収集するための要素が取得できません。BeautifulSoupのfindの使い方が悪いのだと思いますが方法が分かりません。正しい取得方法を教えて下さいますでしょうか。

URL1
https://jp.mercari.com/item/m76917796117
URL2
https://jp.mercari.com/item/m69984898592

image_url = soup.find('img')
※image_urlがNone

発生している問題・エラー

エラーはありません。

	response = requests.get(url)
	soup = BeautifulSoup(response.content, 'html.parser')
	# 画像のURLを取得
	image_url = soup.find('img')
	print(image_url)

該当するソースコード

import requests
from bs4 import BeautifulSoup
import os

def download_mercari_image(url, directory):
	#商品ページを取得
	response = requests.get(url)
	soup = BeautifulSoup(response.content, 'html.parser')
	# print(soup)
	# 画像のURLを取得
	image_url = soup.find('img')
	print(image_url)
    
	#画像ダウンロード
	# image_response = requests.get(image_url)
	# print(image_response)
	# encodingを追加
	# image_response.encoding = image_response.apparent_encoding
	# image_data = image_response.text
    
	#保存先ディレクトリ
	os.makedirs(directory, exist_ok=True)

	#ファイルパスの生成
	file_name = url.split('/')[-1]
	file_path = os.path.join(directory, file_name)
	# print(file_path)
	#画像をファイルに保存
	# with open(file_path, mode='wb') as f: 
	# 	print(image_data)        
	# 	f.write(image_data)
	
	
	# print('画像をダウンロードしました')
		
if __name__ == '__main__':
	#WebサイトのURL
	item_url1 = 'https://jp.mercari.com/item/m69984898592'
	item_url2 = 'https://jp.mercari.com/item/m76917796117'
	
	#画像の保存先ディレクトリ
	output_directory = 'downloaded_images'
	
	#画像のダウンロード
	download_mercari_image(item_url1, output_directory)
	download_mercari_image(item_url2, output_directory)

自分で試したこと

BeautifulSoup find、find_allについて調査
https://yu-nix.com/archives/beautifulsoup4-find/

修正1
image_url = soup.find('div', class_='imageContainer__f8ddf3a2')
結果:None

修正2
image_url = soup.find('img', src='https://static.mercdn.net/item/detail/orig/photos/m76917796117_1.jpg?1681360991')
結果:None

0

1Answer

当該ページのソース見ると分かると思うんですが,コンテンツのほとんどがJavaScriptで動的生成されるため,requestsのような静的リクエストしか行わない手段ではページの内容を取得することができません.
ブラウザの動作が前提のページを読み取りたい場合はSeleniumか何かを使う必要があります.

0Like

Comments

  1. @hfuob

    Questioner

    Selenium使ってなかったです。確認します。ありがとうございます。

  2. seleniumよりplaywrightの方が簡潔ですよー!
    試してみてくださいー!

  3. @hfuob

    Questioner

    ありがとうございます。やってみます。

Your answer might help someone💌