Веб-сайт парсинга Python с авиабилетами

Я пытаюсь извлечь информацию о ценах на авиабилеты с помощью скрипта Python. Пожалуйста, взгляните на картинку:

Проверить элемент

Я хотел бы разобрать все цены (например, 121 внизу дерева). Я создал простой скрипт, и моя проблема в том, что я не уверен, как получить нужные части из кода, стоящего за элементом проверки страницы. Мой код ниже:

import urllib3
from bs4 import BeautifulSoup as BS

http = urllib3.PoolManager()


ULR = "https://greatescape.co/?datesType=oneway&dateRangeType=exact&departDate=2019-08-19&origin=EAP&originType=city&continent=europe&flightType=3&city=WAW"
response = http.request('GET', URL)
soup = BS(response.data, "html.parser")

body = soup.find('body')
__next = body.find('div', {'id':'__next'})
ui_container = __next.find('div', {'class':'ui-container'})
bottom_container_root = ui_container.find('div', {'class':'bottom-container-root'})

print(bottom_container_root)

Проблема в том, что я застрял на уровне ui-container. bottom-container-root — пустая переменная, несмотря на то, что она является прямым потомком ui-container. Может кто-нибудь, пожалуйста, дайте мне знать, как правильно разобрать это дерево?

У меня нет опыта парсинга веб-страниц, но, как оказалось, это один из шагов в большом рабочем процессе, который я создаю.


person maciek    schedule 12.08.2019    source источник
comment
контент добавляется динамически из серии вызовов API в поисках результатов от различных партнеров. Вам нужно будет посмотреть, есть ли логика, которую вы можете воспроизвести, и допустимо ли это в рамках T&C.   -  person QHarr    schedule 13.08.2019


Ответы (1)


.find_next_siblings и .next_element могут быть полезны при навигации по контейнерам.

Ниже приведен пример использования.

from bs4 import BeautifulSoup

html = open("small.html").read()
soup = BeautifulSoup(html)

print soup.head.next_element
print soup.head.next_element.next_element
person PotatoSoop    schedule 12.08.2019