1. ホーム
  2. python

[解決済み] Beautiful Soup経由のScraping Stream、バナーアートは空の「trans.gif」ファイル

2022-02-16 11:06:42

質問

現在、Beautiful SoupでSteamのホームページをスクレイピングし、掲載されているゲームに関する基本情報を出力するPythonのコードを書いています。

page_soup = soup(page_html, 'html.parser')
container = page_soup.findAll('a', {'class':'tab_item'})
container.append(page_soup.findAll('a', {'class':'tab_item.app_impression_tracked'}))

[...]

    count = 0
    for item in container:
        price = container[count].find('div','tab_item_discount')
        title = container[count].find('div','tab_item_content')
        cover = container[count].find('div', 'tab_item_cap')
        tags = title.find('div', 'tab_item_top_tags')
        print("price: " + price['data-price-final'])
        print("Title: " + title.div.text)
        print("Cover: " + cover.img['src'])
        print("Tags: " + tags.text)
        count += 1

どの出力か。

price: 0
Title: RetroArch
Cover: https://store.akamai.steamstatic.com/public/shared/images/trans.gif
Tags: Free to Play, Retro, Singleplayer, Multiplayer
price: 5999
Title: DEATHLOOP
Cover: https://store.akamai.steamstatic.com/public/shared/images/trans.gif
Tags: Action, FPS, First-Person, Stealth
[...]

これはほとんど動作しますが、カバー(バナー画像)が空の1x1 'trans.gif' ファイルとして取得されることを除きます。 私のコードのどこにこのような欠陥があるのか、よくわかりません。

どうすればいいですか?

あなたのコードの欠陥ではありません。 その1x1の画像はおそらくプレースホルダーで、後でページ上のJavascriptによって置き換えられるのでしょう。 BeautifulSoupはJavascriptを実行しません。 もし本当にそれが必要なら、Seleniumのようなものを使ってChromeインスタンスを実行する必要があります。 もっと面倒なので、そのカバーアートが必要なことを確認してください。