Выбор элементов для очистки данных из двух связанных выпадающих меню, - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь получить данные с этого сайта (https://pigeon -ndb.com / races / ). Доступ к данным можно получить, щелкнув одно значение параметра в одном раскрывающемся меню («Выбрать организацию»), а затем щелкнув другое значение в последующем раскрывающемся меню («Выбрать расу»), которое заполняется параметрами в соответствии с выбранным значением. в предыдущем раскрывающемся меню.

Цель состоит в том, чтобы перейти к таблице значений данных после прохождения двух раскрывающихся меню и тщательно их очистить.

Я уже пытался получить значения параметров в первом раскрывающемся меню («Выберите организацию») с помощью этого xpath.

response.xpath('//select[@id="organization-selection"]/option/@value').extract()

Output:[u'<option disabled>Loading...</option>']

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

Я бы не хотел использовать Selenium для выбора вариантов (слишком медленно). Буду признателен за решение скрапа. Спасибо!

1 Ответ

2 голосов
/ 30 апреля 2019

Если вы внимательно проверьте отправленные запросы, вы заметите два запроса GET, отправленных среди других

https://pigeon -ndb.com / апи /? Запросить = get_organizations & база = 2019% 20OB & _ = 1556648619801

и

https://pigeon -ndb.com / апи /? Просить = get_races & организация = AMARILLO% 20RACING% 20PIGEON% 20CLUB & Оргнум = нуль & _ = 1556648619803

они вернут организации и расы как json. Вы должны построить вторую, используя каждую организацию из первой

РЕДАКТИРОВАТЬ: Обратите внимание, что вам нужно отправить базу данных в заголовке Cookies

EDIT2:

import requests

headers={'Cookie': 'database=2019 OB'}
url = 'https://pigeon-ndb.com/api/'
payload = {'request':'get_organizations'}
resp = requests.get(url, params=payload, headers=headers)
for org in resp.json()['data'][:2]: #just first two organizations
    payload = {'request':'get_races', 'organization':org.get('Sys')}
    resp = requests.get(url, params=payload, headers=headers)
    print(resp.json())

это напечатает гонки для первых двух организаций. Более того, вы можете указать _ в качестве параметра - это отметка времени эпохи

также для деталей гонки смотрите

https://pigeon -ndb.com / апи /? Запросить = get_race_details & racename = BIG% 20SPRING и дата = 03% 2F23% 2F2019 и время = 1556501306

здесь время обязательно для подачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...