从两个连接的下拉菜单中选择用于刮取数据的元素,<option disabled>

2024-04-23 08:53:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从这个网站(https://pigeon-ndb.com/races/)获取数据。通过单击一个下拉菜单(“选择组织”)中的一个选项值,然后单击后续下拉菜单(“选择比赛”)中的另一个值来访问数据,该下拉菜单根据上一个下拉菜单中单击的值填充选项

我们的目标是在通过两个下拉菜单后进入数据值表,并用scrapy将它们刮去

我已经尝试使用这个xpath获取第一个下拉菜单(“选择组织”)中的选项值

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

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

我期望从下拉菜单中的所有选项得到值(多于1个),但只得到1个不有用的选项值

我希望避免使用Selenium来点击选项(太慢)。希望有个棘手的解决办法。谢谢


Tags: 数据httpscom目标网站response选项select
1条回答
网友
1楼 · 发布于 2024-04-23 08:53:25

如果仔细检查发送的请求,您将注意到在其他请求中有两个GET请求正在发送

https://pigeon-ndb.com/api/?request=get_organizations&database=2019%20OB&_=1556648619801

以及

https://pigeon-ndb.com/api/?request=get_races&organization=AMARILLO%20RACING%20PIGEON%20CLUB&orgNum=null&_=1556648619803

他们将把组织和比赛作为json返回。这取决于你如何利用第一个组织中的每一个组织来构建第二个组织

编辑:注意您需要在Cookies头中发送数据库

编辑2:

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())

这将打印前两个组织的比赛。 此外,您还可以提供u作为param—这是来自Epoch的时间戳

关于比赛细节,请看

https://pigeon-ndb.com/api/?request=get_race_details&racename=BIG%20SPRING&date=03%2F23%2F2019&time=1556501306

在这里,时间是必须的

相关问题 更多 >