Как получить текст нескольких элементов div внутри тега списка при прокрутке страницы с помощью Python

У меня есть следующая веб-страница https://www.skroutz.gr/s/15013958/Hasbro-Monopoly-Classic-Game.html, с которой я хочу получить для каждого продавца цену, доступность, имя продавца.

Они находятся внутри элемента списка в виде div, поэтому я сделал следующее.

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome('C:\\chromedriver.exe')

browser.get("https://www.skroutz.gr/s/15013958/Hasbro-Monopoly-Classic-Game.html")
time.sleep(1)

elem = browser.find_element_by_tag_name("body")

no_of_pagedowns = 20

while no_of_pagedowns:
    elem.send_keys(Keys.PAGE_DOWN)
    time.sleep(0.2)
    no_of_pagedowns-=1

post_elems = browser.find_elements_by_css_selector(".card.js-product-card")

for post in post_elems:
    print(post.text)

Пока я получаю данные в виде целого текста, а не по div. Как получить цену, наличие и продавца за пост

Мне сделать следующее? или есть более правильный способ?

for post in post_elems:
    prices = browser.find_elements_by_css_selector(".price")
    sellers = browser.find_elements_by_css_selector(".shop-name")
    availability = browser.find_elements_by_css_selector("p.availability")
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
136
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать элемент post для поиска данных, он найдет только данные, относящиеся к конкретному сообщению.

data = []
for post in post_elems:
    price = post.find_element_by_css_selector(".price").text
    seller = post.find_element_by_css_selector(".shop-name").text
    availability = post.find_element_by_css_selector("p.availability").text

    # add to list of lists
    data.append([price, seller, availability])

    # print
    print(f'price: {price} seller: {seller} availability: {availability}')

Но как я помещу их каждый из них в список, например [цена1,доступность1,продавец1],[цена2,доступность2,продавец2]..?

user10358702 08.04.2019 09:34

Сначала определите пустой список перед циклом for. Затем добавьте все элементы в этот список.

YusufUMS 08.04.2019 09:39

@Nikos Обновил мой ответ, вы можете создавать список и каждый раз добавлять новый список.

Guy 08.04.2019 09:43

@Guy Как вы думаете, мне следует поместить цикл for внутрь цикла while для прокрутки или в этом нет необходимости? Спасибо большое

user10358702 08.04.2019 10:12

@Nikos Нет ленивой загрузки, поэтому прокрутка может вообще не понадобиться. Но лучший способ узнать это попробовать :)

Guy 08.04.2019 10:14

@Guy Он работает нормально, но как исправить получение некоторых цен, таких как ['20,00 €'] вместо 20,00 € при использовании price = post.find_element_by_css_selector(".price").text.strip().spl‌​it ('\n')[5] Я использую это, потому что для некоторых цен я получаю ['21,99 €', '+ 0,00 €', 'Доставка', '+ 2,00 €', 'COD', '23,99 €']

user10358702 08.04.2019 14:33

@Nikos Трудно отвечать на вопросы в комментариях, если у вас есть новый вопрос, вы должны опубликовать новый вопрос с текущим кодом.

Guy 08.04.2019 14:50

Другие вопросы по теме