Веб-сайт загружен событием JavaScript
, которое динамически отображает данные после загрузки страницы. Библиотека
requests
не сможет отображать JavaScript
на лету. так что вы можете использовать selenium
или requests_html
. и действительно, есть много модулей, которые могут сделать это.
Теперь у нас есть еще одна опция в таблице, чтобы отследить, откуда данные отображаются. Мне удалось найти запрос XHR , который используется для извлечения данных из back-end
API
и их рендеринга на стороне пользователя.
Вы можете получить XHR
запрос открытым Developer-Tools и проверка Сеть и проверка XHR/JS
запросов, сделанных в зависимости от типа вызова, таких как fetch
import requests
import csv
data = {'locationLatitude': None, 'locationLongitude': None, 'distanceInMiles':
0, 'residencyTypes': [], 'genderGroup': None, 'ageRange': None, 'religiousAffiliation': None, 'financialAssistances': [], 'examinations': [], 'specialNeeds': False, 'scholarshipsAndBurseries': False, 'latitudeSW': 47.823214345168694, 'longitudeSW': -18.049563984375, 'latitudeNE': 59.385618287793505, 'longitudeNE': 12.953853984375021, 'contactCountyID': 0, 'contactCountryID': 0, 'londonBoroughID': 0, 'filterByBounds': True, 'savedBounds': True, 'zoom': 5, 'center': {'lat': 54.00366, 'lng': -2.547855}}
r = requests.post(
"https://www.isc.co.uk/Umbraco/Api/FindSchoolApi/FindSchoolListResults?skip=0&take=20", json=data).json()
with open("data.csv", 'w', newline="") as f:
writer = csv.writer(f)
writer.writerow(["Name", "Address", "Phone", "Email"])
for item in r:
writer.writerow(
[item["Name"], item["FullAddress"], item["TelephoneNumber"], item["EmailAddress"]])
print("Done")
Вывод: Просмотр онлайн