данные о ценах на полеты и цены на питоне от skyscanner

1

Я пытаюсь получить данные о цене из следующего URL-адреса. Однако я могу только представить текст от "div до определенного уровня, вот мой код:

from selenium import webdriver
from bs4 import BeautifulSoup

def scrape_flight_prices(URL):

    browser = webdriver.PhantomJS()
    # PARSE THE HTML
    browser.get(URL)
    soup = BeautifulSoup(browser.page_source, "lxml")
    page_divs = soup.findAll("div", attrs={'id':'app-root'}) 
    for p in page_divs:
        print(p)

if __name__ == '__main__':
  URL1="https://www.skyscanner.net/transport/flights/brs/gnb/190216/190223/?adults=1&children=0&adultsv2=1&childrenv2=&infants=0&cabinclass=economy&rtn=1&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false&ref=home#results"

И вот вывод:

<div id="app-root">
<section class="day-content state-loading state-no-results" id="daysection">
<div class="day-searching">
<div class="hot-spinner medium"></div>
<div class="day-searching-message">Searching</div>
</div>
</section>
</div>

Раздел html, который я хочу очистить, выглядит следующим образом:

https://www.skyscanner.net/transport/flights/brs/gnb/190216/190223/?adults=1&children=0&adultsv2=1&childrenv2=&infants=0&cabinclass=economy&rtn=1&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false&ref=home#results

Однако, когда я пытаюсь очистить следующий код:

prices = soup.findAll("a", attrs={'target':"_blank", "data-e2e":"itinerary-price", "class":"CTASection__price-2bc7h price"})  
for p in prices:
    print(p)

Он ничего не печатает! Я подозреваю, что js-скрипт запускает что-то для генерации остальной части кода и/или данных? Может ли кто-нибудь помочь мне извлечь данные? В частности, я пытаюсь получить цену, время полета, название авиакомпании и т.д., Но если красивый суп не печатает соответствующий html со страницы, тогда я не уверен, как еще это получить?

Поблагодарили бы всех указателей! Спасибо заранее!

Теги:
selenium-webdriver
beautifulsoup

1 ответ

1
Лучший ответ

Попробуйте ввести код, чтобы получить цены:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

prices = [price.text for price in wait(browser, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "price")))]
print(prices)
  • 0
    Спасибо за вашу помощь, я не могу заставить это работать, хотя, 'драйвер' не определен. Я пытался поменять его на «webdriver.PhantomJS ()» и «суп», но ни один из них не сработал. Я не совсем уверен, что я делаю с этим, чтобы быть справедливым?
  • 0
    @ user3062260, оу ... верно. заменить driver browser
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню