Парсинг названия продукта на Amazon с использованием запросов - PullRequest
0 голосов
/ 19 декабря 2018

Исходный код взят из списка бестселлеров Amazon:

<div class="p13n-sc-truncate p13n-sc-line-clamp-2" aria-hidden="true" data-rows="2">
        Fingerlings Light Up Unicorn - Mackenzie (White) - Friendly Interactive Toy by WowWee
    </div>

........ omitted code here..........

    <div class="p13n-sc-truncate p13n-sc-line-clamp-2" aria-hidden="true" data-rows="2">
        Rocketbook Everlast Reusable Smart Notebook, Executive Size
    </div>

Я хочу зайти на Amazon.com и получить все самые продаваемые товары, которые есть на странице.Приведенный выше код является исходным кодом, полученным с текущей страницы (страница обновляется ежечасно, поэтому имена элементов различаются, но класс остается тем же).Так что в этом случае я хочу, чтобы он вытащил названия:

«Многоразовый умный ноутбук Rocketbook Everlast, представительский размер», а также «Единорог, светящийся единорог - Маккензи (белый) - Дружественная интерактивная игрушка от WowWee».

Я планировал сделать это так:

r = requests.get("https://www.amazon.com/Best-Sellers-Amazon-Launchpad/zgbs/boost/ref=zg_bs_nav_0")
soup = BeautifulSoup(get_cart.text,"lxml")
n = soup.find("div",{'class':'p13n-sc-truncated'})

Я думаю, что этот подход не будет работать, потому что один класс найден по всему источнику страницы, и, скорее всего, это приведет к ошибкетак как есть много упоминаний об этом классе, и, во-вторых, как будет вообще поступать текст из этого класса?Это просто скажет название продукта и ничего больше?

1 Ответ

0 голосов
/ 19 декабря 2018

Правильно, этот класс слишком универсален для этой страницы.Что вы можете сделать, так это сначала определить контейнеры, в которых находятся лучшие товары.Например, это может быть:

soup.select("ol#zg-ordered-list > li")

Теперь вы можете работать только внутри контейнеров с предметами, что серьезно уменьшает область действия:

for product in soup.select("ol#zg-ordered-list > li"):
    product_name = product.select_one(".p13n-sc-truncated").get_text()
    print(product_name)

Или вы можете получить название продукта изalt атрибут изображения товара:

for product in soup.select("ol#zg-ordered-list > li"):
    product_name = product.select_one("img[alt]")["alt"]
    print(product_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...