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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2782閲覧

Pythonで指定したWebサイトから画像URLを取得したい

PJwnOI

総合スコア39

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/01/30 03:29

前提・実現したいこと

Pythonでスクレイピングをしてポケモンカード検索のカードの画像URLを取得できるようにしたいと思っています。保存はしません。

発生している問題・エラーメッセージ

Pythonのスクレイピングで、いらすとやの画像を一気にダウンロード
こちらのサイトを参考にしてみましたが、URLのリストをprintで出力しても何も出力されませんでした。

該当のソースコード

Python

1import requests 2from bs4 import BeautifulSoup 3import time 4 5key = "ピカチュウ" 6# key = input() 7url = "https://www.pokemon-card.com/card-search/index.php?keyword=" + key + "&se_ta=&regulation_sidebar_form=XY&pg=&illust=&sm_and_keyword=true" 8 9linklist = [] 10 11# keyword= カード名 12# se_ta= カードの種類 13# egulation_sidebar_form= レギュレーション 14 15html = requests.get(url).text 16soup = BeautifulSoup(html, 'lxml') 17 18img_list =soup.select('div > ul > li > div > a > img') 19 20for a in img_list: 21 link_url = a.attrs['href'] 22 linklist.append(link_url) 23 24 time.sleep(1.0) 25 26for page_url in linklist: 27 page_html = requests.get(page_url).text 28 page_soup = BeautifulSoup(page_html, "lxml") 29 img_list = page_soup.select('div.entry > div > a > img') 30 31 for img in img_list: 32 img_url = (img.attrs['src']) 33 print(img_url)

補足情報(FW/ツールのバージョンなど)

Python 3.9.0
beautifulsoup4 4.10.0
requests 2.27.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

ポケモンカード検索用の API が提供されていますので、それを使います。パラメータにキーワードを含めて HTTP POST を実行すると検索結果が JSON 形式で返ってきます(この情報を使って当該ページの内容をレンダリングしている様です)。

python

1import requests 2import json 3 4site_top_url = 'https://www.pokemon-card.com' 5search_api_url = f'{site_top_url}/card-search/resultAPI.php' 6# key = input() 7key = "ピカチュウ" 8search_param = { 9 'keyword': key, 10 'se_ta': '', 11 'regulation_sidebar_form': 'XY', 12 'illust': '', 13 'sm_and_keyword': 'true', 14} 15 16json_text = requests.post(search_api_url, data=search_param).text 17json_dict = json.loads(json_text) 18 19img_urls = [] 20for d in json_dict['cardList']: 21 img_urls.append(site_top_url + d['cardThumbFile']) 22 23from pprint import pprint 24pprint(img_urls) 25 26# 27['https://www.pokemon-card.com/assets/images/card_images/large/SN/041153_P_PIKACHIXYUUBUI.jpg', 28 'https://www.pokemon-card.com/assets/images/card_images/large/SI/040375_P_PIKACHIXYUU.jpg', 29 'https://www.pokemon-card.com/assets/images/card_images/large/SI/040610_P_PIKACHIXYUU.jpg', 30 'https://www.pokemon-card.com/assets/images/card_images/large/SI/040377_P_PIKACHIXYUUV.jpg', 31 : 32

投稿2022/01/30 04:19

melian

総合スコア21106

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

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

PJwnOI

2022/01/31 11:19

APIが提供されていたんですね.知りませんでした. 時間があるときに試してみます.
PJwnOI

2022/02/01 12:40

正しくできました。ありがとうございました。 ポケモンカード検索用のAPIというのはどこで見つけられましたか? Webサイトで開発者用ツールを使いましたが、Webに疎く、見つけられませんでした。
melian

2022/02/01 13:22

その開発者用ツール(ウェブコンソール)で通信状況を確認していて、その中の XHR(XMLHttpRequest)通信を見ていて気が付いたのでした(XHR 通信の場合、[XHR] というアイコンが表示されます)。
PJwnOI

2022/02/07 12:37

ありがとうございます。 他のことに参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問