yuhtaryouko
@yuhtaryouko (Yuta Kato)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

商品名を抽出したい

こちらの質問の続きなのですが、どういった投稿の仕方をすればよいか分からなくて新規に立てました。

ポケモンカードの商品データを抽出し、pandasにて商品名・発売日・金額をリスト化しようという目的です。

該当するソースコード

from datetime import date
from bs4 import BeautifulSoup as bs
import requests
import pandas as pd
url = "https://www.pokemon-card.com/products/"

res = requests.get(url)

soup = bs(res.text, 'html.parser')

dates = []
names = []
prices = []


titles = soup.select('#productsTab_expansionPack .List-product .List_item')
len(titles)

ここまで書いてうまく機能していますが、len関数でtitlesの数をチェックすると20個しかありません。
しかし、下記の画像を参照頂きたいのですが、List_itemは28個あります。

image.png

残りの8個を抽出できないのはなぜでしょうか?20個までは抽出したいデータが取れています。

自分で試したこと

ソースコードのパターンがページ内のどこかで変わっているのかと思いチェックしましたがそういった場所はありませんでした。すべて同じパターンが繰り返し記述されています。

0

2Answer

動的に表示されているせいなのか、最初に帰ってきたHTMLでは20番目の商品までの表示となっているっぽいですね。

image.png

seleniumで完全に表示された後、同様にCSSセレクタ「#productsTab_expansionPack .List-product .List_item」で取得すればすべての28個の要素がとってこれることも確認できました。

1Like

Comments

  1. @yuhtaryouko

    Questioner

    ありがとうございます。なるほど!ページソースを読み切る前に取得してしまっているんですね…。早速こちらでやってみます。
from selenium import webdriver
from datetime import date
from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

!pip install selenium
!apt-get update 
!apt install chromium-chromedriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)

url = "https://www.pokemon-card.com/products/"
driver.get(url)
html = driver.page_source
soup = bs(html, 'lxml')


titles = soup.select('#productsTab_expansionPack .List-product .List_item')
len(titles)  # ->28

@YottyPGさんの回答のようにGoogle Colabではこれで動きます。
参考資料
https://stackoverflow.com/questions/51046454/how-can-we-use-selenium-webdriver-in-colab-research-google-com

1Like

Comments

  1. @yuhtaryouko

    Questioner

    ありがとうございます!コードまで記述して頂きまして大変参考になります。

Your answer might help someone💌