簡體   English   中英

帶有下拉列表選擇器的Python requests-html

[英]Python requests-html with drop-down list selector

我正在一個包含Java腳本以檢索數據和下拉列表輸入的網站上執行抓取。 我正在使用requests-html處理Java部分,但是我很難在下拉列表中選擇值。

這是我的代碼:

import requests_html
import bs4
url = 'https://www.cmegroup.com/trading/interest-rates/stir/eurodollar_quotes_settlements_futures.html'
params = {'tradeDate':'01/15/2019'}
session = requests_html.HTMLSession()
r = session.get(url, params=params)
r.html.render()
soup = bs4.BeautifulSoup(r.html.html, 'lxml')
r.session.close()
x = soup.body.find('select', attrs={'id':'cmeTradeDate'})

輸出是bs4.element.tag:

<select class="cmeSelect" id="cmeTradeDate" name="tradeDate" style="width: 268px; padding-right: 60px;"><option selected="" value="01/16/2019">Wednesday, 16 Jan 2019 (Final)</option> option value="01/15/2019">Tuesday, 15 Jan 2019 (Final)</option><option value="01/14/2019">Monday, 14 Jan 2019 (Final)</option><option value="01/11/2019">Friday, 11 Jan 2019 (Prelim)</option><option value="01/10/2019">Thursday, 10 Jan 2019 (Final)</option></select>

如您所見,即使我指定了15日,下拉列表中的選定值仍是1月16日。 主表中的期貨數據也是16日。

使用pandas提取表的代碼非常簡單:

pd.read_html(r.html.html, attrs={'id':'settlementsFuturesProductTable'})[0]

在提取html之前如何從選項中選擇日期?

(另外,請注意,如果requests-html可以完成與使用BeautifulSoup相同的操作,那么我很想知道如何做。)

您正確地說,您正在與之交互的頁面嚴重依賴javascript,而該requests不會進行評估。 tradeDate作為GET參數傳遞對該特定站點沒有任何作用。 您最好與從其獲取數據的端點進行交互,如下所示:

import json
import requests

url = 'https://www.cmegroup.com/CmeWS/mvc/Settlements/Futures/Settlements/1/FUT'

r = json.loads(requests.get(url, params={
    'strategy': 'DEFAULT',
    'tradeDate': '01/15/2019',
    'pageSize': '500'
}).text)

print(f"tradeDate: {r['tradeDate']}")

for settlement in r['settlements']:
    print(settlement)

結果:

tradeDate: 01/15/2019
{'month': 'FEB 19', 'open': '97.2875', 'high': '97.3025', 'low': '97.2875', 'last': '97.2975', 'change': '+.0125', 'settle': '97.2975', 'volume': '80,470', 'openInterest': '216,090'}
{'month': 'MAR 19', 'open': '97.3100', 'high': '97.3250', 'low': '97.3000', 'last': '97.3150', 'change': '+.0150', 'settle': '97.3200', 'volume': '239,375', 'openInterest': '1,440,528'}
{'month': 'APR 19', 'open': '97.3050', 'high': '97.3250', 'low': '97.3000', 'last': '97.3200', 'change': '+.0150', 'settle': '97.3200', 'volume': '17,317', 'openInterest': '41,199'}
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM