У меня есть следующая веб-страница 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")
Вы можете использовать элемент 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}')
Сначала определите пустой список перед циклом for
. Затем добавьте все элементы в этот список.
@Nikos Обновил мой ответ, вы можете создавать список и каждый раз добавлять новый список.
@Guy Как вы думаете, мне следует поместить цикл for внутрь цикла while для прокрутки или в этом нет необходимости? Спасибо большое
@Nikos Нет ленивой загрузки, поэтому прокрутка может вообще не понадобиться. Но лучший способ узнать это попробовать :)
@Guy Он работает нормально, но как исправить получение некоторых цен, таких как ['20,00 €'] вместо 20,00 € при использовании price = post.find_element_by_css_selector(".price").text.strip().split ('\n')[5] Я использую это, потому что для некоторых цен я получаю ['21,99 €', '+ 0,00 €', 'Доставка', '+ 2,00 €', 'COD', '23,99 €']
@Nikos Трудно отвечать на вопросы в комментариях, если у вас есть новый вопрос, вы должны опубликовать новый вопрос с текущим кодом.
Но как я помещу их каждый из них в список, например [цена1,доступность1,продавец1],[цена2,доступность2,продавец2]..?