Хранение вывода цикла в одной переменной - PullRequest
0 голосов
/ 15 января 2019

Когда я запускаю свой код, я получаю цену отеля, которую я определил в URL, и после этого я получаю цены на все другие отели, которые предлагаются в качестве предложения. Для поднабора и выбора первого вывода мне нужно сохранить вывод цикла for в одной переменной или в виде списка. Как мне это сделать?

Я использую Python 3.6.5, Windows 7 Professional

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
chrome_path= r"C:\Users\Downloads\chromedriver_win32\chromedriver.exe"
  dr = webdriver.Chrome(chrome_path)
  dr.get("url")
 hoteltrial = dr.find_elements_by_class_name("hotel-info")

for hoteltrial1 in hoteltrial:
  nametrial = hoteltrial1.find_element_by_class_name("hotel-name")
  print(nametrial.text + " - ")
try:
    pricetrial = hoteltrial1.find_element_by_class_name("c-price")
    price = pricetrial.find_element_by_css_selector("span.price-num")
    currency = pricetrial.find_element_by_class_name("price-currency")
    print(currency.text + price.text)

except NoSuchElementException:
    print("sold")

Фактический результат выглядит примерно так, и мне нужна цена только Langham

The Langham Hong Kong - 
$272
Cordis Hong Kong - 
$206
Island Shangri-La - 
$881

1 Ответ

0 голосов
/ 15 января 2019

То, что вы делаете, это переопределение переменных, которые вы используете в цикле for. Для каждой итерации найденное новое значение присваивается переменной в цикле.

for i in range(5):
    x = i

Когда вы запустите этот пример и посмотрите на значение, присвоенное x после цикла for, вы увидите, что значение равно 4. Вы делаете то же самое в своем коде.

Чтобы решить эту проблему, вы можете определить список вне цикла for и добавить результаты в этот список.

hotel = []
for i in range(5):
    hotel.append(i)

После запуска приведенного выше кода вы увидите, что это приводит к списку.

hotel
[0,1,2,3,4]

Вы должны сделать то же самое в своем коде.

hotellist = []
for hoteltrial1 in hoteltrial:
    nametrial = hoteltrial1.find_element_by_class_name("hotel-name")
    hName = nametrial.text + " - "
    try:
        pricetrial = hoteltrial1.find_element_by_class_name("c-price")
        price = pricetrial.find_element_by_css_selector("span.price-num")
        currency = pricetrial.find_element_by_class_name("price-currency")
        result = hName + currency.text + price.text
        hotellist.append(result)
    except NoSuchElementException:
        result = hName + "Sold"
        hotellist.append(result)

После запуска этого цикла for у вас будет список со всеми результатами, найденными в каждой итерации цикла. Вместо этого вы можете использовать словарь, чтобы получить информацию о каждом отеле и цене, выполнив поиск ключа.

Использовать dict:

hoteldict = {}
for hoteltrial1 in hoteltrial:
    nametrial = hoteltrial1.find_element_by_class_name("hotel-name")
    try:
        pricetrial = hoteltrial1.find_element_by_class_name("c-price")
        price = pricetrial.find_element_by_css_selector("span.price-num")
        currency = pricetrial.find_element_by_class_name("price-currency")
        hoteldict.update({nametrial.text:currency.text+price.text})
    except NoSuchElementException:
        hoteldict.update({nametrial.text:"Sold"})

Для словаря используйте update вместо append.

Доступ к вашему отелю:

hoteldict["The Langham Hong Kong"] #Will return $272

Надеюсь, это помогло вам. С уважением, Sam

...