作为替代方案,您是否知道您的页面有一个 API。您可以使用它来一次收集所有元素所需的所有数据,而无需靠近浏览器。它将明显更快,更稳定。
试试这个代码:
import requests
url = 'https://www.dinoloket.nl/javascriptmodelviewer-web/rest/models/columns/descripted'
postData = {
"language":"nl",
"modelType":"RGS",
"model":"REGIS",
"depthReference":"NAP",
"version":"v02r2",
"dinoId":"B32F0034",
"topDepth":"null",
"bottomDepth":"null"
}
response = requests.post(url=url, json=postData)
json_response = response.json()
for columns in json_response['columns']:
for values in columns['profileMetadata']:
for layer in values['layerInfos']:
if layer['code'] == 'LITHOLOGY':
print ("type: " , columns['columnType'])
print ('upper: ', values['upper'])
print ('lower' , values['lower'])
print ('Code: ' , layer['code'])
print ('value: ', layer['value'])
print ('\n###############\n') # seperator
在postData 中,您可以看到"model":"REGIS" - 您说您正在使用它。
"dinoId":"B32F0034" 似乎与标识符有关:
当我运行该代码时,我得到以下输出 - 这似乎是该页面上的每个“lithologie”工具提示:
type: HYDROGEOLOGY
upper: 344
lower 386
Code: LITHOLOGY
value: Zandige eenheid, hoofdzakelijk bestaande uit midden en grof zand, met weinig zandige klei,
fijn zand en grind en een spoor klei en veen
###############
type: HYDROGEOLOGY
upper: 21
lower 138
Code: LITHOLOGY
value: Zandige eenheid, hoofdzakelijk bestaande uit midden en fijn zand, weinig zandige klei en grof zand en een spoor klei, veen en grind
###############
type: HYDROGEOLOGY
upper: 140
lower 197
Code: LITHOLOGY
value: Kleiige eenheid, hoofdzakelijk bestaande uit zandige klei en klei, weinig fijn en midden zand en een spoor veen en grof zand
###############
type: HYDROGEOLOGY
upper: 199
lower 266
Code: LITHOLOGY
value: Zandige eenheid, hoofdzakelijk bestaande uit midden, grof en fijn zand, weinig kleiig zand
en een spoor klei en grind
###############
type: HYDROGEOLOGY
upper: 268
lower 335
Code: LITHOLOGY
value: Zandige eenheid, hoofdzakelijk bestaande uit grof en midden zand, weinig zandige klei, fijn zand en grind en een spoor klei
###############
type: HYDROGEOLOGY
upper: 337
lower 342
Code: LITHOLOGY
value: Kleiige eenheid, hoofdzakelijk bestaande uit zandige klei weinig klei, fijn, midden en grof zand, een spoor grind en een kans op stenen, keien en blokken
###############
我不知道 lower 和 upper 对您是否有用 - 它们只是作为提取的样本数据。
根据您需要的其他信息,您可以在网络选项卡上的开发工具中探索您从站点返回的 JSON 数据结构。当您使用您的网站并找到名为 descripted 的项目以进行浏览时,请在后台打开此选项卡
* * * * * **更新** * * * * * *
将 API 链接在一起以允许在地址处进行钻取。
在脚本开始处更新地址,它会输出其余的。交给你来获得你想要的输出格式:
import requests
import urllib.parse
#Enter the address to drill - this is all that's needed
address = urllib.parse.quote("Rederijweg 26, Oosterhout")
#user the search suggested to get the ID for the address
suggest_response = requests.get('https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?q='+address)
suggest_json = suggest_response.json()
address_ID = suggest_json['response']['docs'][0]['id']
#address id is something like" adr-21ceef9f7c9e361352969a3bcab636e6"
#use the address ID to get the coordinates:
lookup_response = requests.get("https://geodata.nationaalgeoregister.nl/locatieserver/v3/lookup?fl=centroide_rd,type&id=" + address_ID)
lookup_json = lookup_response.json()
coords_string =lookup_json['response']['docs'][0]['centroide_rd']
#coords come in like: POINT(117454.426 408494.3)
# prcess this into 2 values
coords_string= str.replace(coords_string, "POINT(", "")
coords_string= str.replace(coords_string, ")", "")
coords_array = str.split(coords_string, " ")
#use those coordinates to drill
url = "https://www.dinoloket.nl/javascriptmodelviewer-web/rest/models/columns/virtual"
postData = {
"language": "nl",
"modelType": "RGS",
"model": "REGIS",
"depthReference": "MV",
"version": "v02r2",
"resolution": "100",
"ycoordinate":float(coords_array[1]),
"xcoordinate":float(coords_array[0])
}
response = requests.post(url=url, json=postData)
json_response = response.json()
#process the drill results
for columns in json_response['columns']:
for meta in columns['profileMetadata']:
for layer in meta['layerInfos']:
if layer['code'] == 'LITHOLOGY':
print ("type: " , columns['columnType'])
print ('upper: ', meta['upper'])
print ('lower' , meta['lower'])
print ('Code: ' , layer['code'])
print ('value: ', layer['value'])
print ('\n###############\n') # seperator
对我来说,只有前 3 个输出(节省一些粘贴空间):
type: HYDROGEOLOGY
upper: 20
lower 21
Code: LITHOLOGY
value: Complexe eenheid, bestaande uit een afwisseling van zandige klei, midden en fijn zand, klei en veen en een weinig grof zand
###############
type: HYDROGEOLOGY
upper: 21
lower 22
Code: LITHOLOGY
value: Zandige eenheid, hoofdzakelijk bestaande uit midden en fijn zand, met weinig zandige klei en grof zand en een spoor klei, veen en grind
###############
type: HYDROGEOLOGY
upper: 22
lower 23
Code: LITHOLOGY
value: Zandige eenheid, hoofdzakelijk bestaande uit midden en fijn zand, met weinig zandige klei en grof zand en een spoor klei, veen en grind
不知道这些描述在整个网站上有多么独特 - 但它匹配: