Страница использует лат и лон для запроса данных.Вы можете имитировать xhr (сначала получая лат и лон за пройденное местоположение - для этого я использую бесплатный API . Как вы это делаете, зависит от вас.)
Вы можете увидеть запрос, сделанный здесь:
Ответ json имеет строки, содержащие html против ключей.Вот пример вывода
Поскольку внутренними значениями, связанными с ключами в строках, является html, я передаю его в BeautifulSoup для обработки.Пример содержания html:
import requests
import json
import pandas as pd
from bs4 import BeautifulSoup as bs
apiKey = "yourFreeAPIkey"
address = "78759"
url = "https://api.opencagedata.com/geocode/v1/json?q=" + address + "&key=" + apiKey + "&pretty=1"
res = requests.get(url).json()
data = res['results'][1]['geometry']
lat = data['lat']
lng = data['lng']
date = '2019-03-09'
res = requests.get('https://www.imax.com/showtimes/ajax/theatres?date=' + date + '&lat=' + str(lat) + '&lon=' + str(lng))
soup = bs(res.content, 'lxml')
newData = json.loads(soup.select_one('p').text)
columns = ['movieTitle', 'movieLink', 'theatreLink', 'address','movieFormat', 'times']
baseURL = 'https://www.imax.com'
results = []
for row in newData['rows']:
soup = bs(row['row'], 'lxml')
link = baseURL + soup.select_one('a')['href']
address = soup.select_one('.theatre-address').text.strip()
movieTitle = soup.select_one('.movie-title').text.strip()
movieLink = baseURL + soup.select_one('.movie-title a')['href']
movieFormat = soup.select_one('.movie-format').text.strip()
times = [item.text.strip() for item in soup.select('.line-items a')]
results.append([movieTitle, movieLink, link, address, movieFormat, times])
df = pd.DataFrame(results, columns = columns)
print(df)
Пример результатов: