我正在尝试构建一个python脚本来从此site
中检索历史风力数据 我之前做过类似的事情。在这种情况下,日期和相关参数明确地输入到URL地址中。正如您在上一个链接中所看到的,例如日期是从日历中选择的,不会显示为网址的一部分。
如何使用python选择特定日期并分别输入字段Settlement Date
和NGC BM Unit Id
的ID?
例如:
Settlement Date
= 2017-08-01
NGC BM Unit Id
= ANSUW-1
我没有MWE,因为我不知道如何继续。我试图重复使用其他脚本中的代码来获取天气数据:
from lxml import html
from lxml import etree
import urllib
def gettabledata():
web= urllib.urlopen("https://www.bmreports.com/bmrs/?q=actgenration/actualgeneration")
s = web.read()
html = etree.HTML(s)
但在这种情况下它并不那么简单,因为过滤器参数不会通过网址传递。
感谢。
答案 0 :(得分:2)
我认为以下脚本会为您提供所需的响应:
import requests
payload = {"flowid":"b1610","start_date":"2017-08-01","period":"*","bmu_id":"ANSUW-1"}
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36",
"X-Requested-With":"XMLHttpRequest"
}
page = requests.get("https://www.bmreports.com/bmrs/?", params=payload, headers=headers).text
print(page)
答案 1 :(得分:1)
是的,我在评论中提出的建议真的非常糟糕。沙欣是对的。我要补充的是你可以在json中获得相对容易处理的结果。到目前为止,我花了这么长时间。
convert image.png -crop 229x367+39+0 +repage image_cropped.png
>>> import requests
>>> parameter={"flowid":"b1610","start_date":"2017-08-02","period":"*","bmu_id":"ANSUW-1"}
>>> arg = 'https://www.bmreports.com/bmrs/?q=tablegen¶meter=%s' % str(parameter).replace("'",'"').replace(' ','')
>>> r = requests.get(arg)
>>> r
<Response [200]>
的结果是json,这看起来很可怕。但是,在检查时,它被证明是一系列嵌套的词典。最后,如果你挖洞,你发现r
是48个词典的列表,你可以从中轻松提取你想要的任何词典。
'item'
您可以将>>> r.json()['responseBody']['responseList']['item'][0]
{'quantity': '1.414', 'marketGenerationBMUId': 'T_ANSUW-1', 'timeSeriesID': 'ELX-EMFIP-AGOG-TS-14842', 'powerSystemResourceType': 'Generation', 'resolution': 'PT30M', 'documentRevNum': '1', 'bMUnitID': 'T_ANSUW-1', 'registeredResourceEICCode': '48W00000ANSUW-1E', 'businessType': 'Production', 'settlementPeriod': '48', 'curveType': 'Sequential fixed size block', 'marketGenerationUnitEICCode': '48W00000ANSUW-1E', 'activeFlag': 'Y', 'nGCBMUnitID': 'ANSUW-1', 'processType': 'Realised', 'documentID': 'ELX-EMFIP-AGOG-17134615', 'marketGenerationNGCBMUId': 'ANSUW-1', 'settlementDate': '2017-08-02', 'documentType': 'Actual generation'}
>>> r.json()['responseBody']['responseList']['item'][47]
{'quantity': '1.088', 'marketGenerationBMUId': 'T_ANSUW-1', 'timeSeriesID': 'ELX-EMFIP-AGOG-TS-172', 'powerSystemResourceType': 'Generation', 'resolution': 'PT30M', 'documentRevNum': '1', 'bMUnitID': 'T_ANSUW-1', 'registeredResourceEICCode': '48W00000ANSUW-1E', 'businessType': 'Production', 'settlementPeriod': '1', 'curveType': 'Sequential fixed size block', 'marketGenerationUnitEICCode': '48W00000ANSUW-1E', 'activeFlag': 'Y', 'nGCBMUnitID': 'ANSUW-1', 'processType': 'Realised', 'documentID': 'ELX-EMFIP-AGOG-17134615', 'marketGenerationNGCBMUId': 'ANSUW-1', 'settlementDate': '2017-08-02', 'documentType': 'Actual generation'}
设置为items
词典,然后从那里开始。
'item'
附录:如果你不知道我是如何得到那个网址的,那就是它。我使用的是Chrome浏览器。我右键单击任何元素,然后点击'Inspect'。然后我点击了右侧窗格中的“网络”标签,然后点击了“XHR”。现在我点击了“查看”按钮。正如您在下面的小屏幕视图中看到的,我可以在表格中看到'?q = tablegen'。我右键单击并将其复制到编辑器中进行研究。