我再次访问web scraping,尝试开发一种可以从数据库中提取数据的工具。
这里我使用的是一份物质档案,可在以下网址找到:
https://echa.europa.eu/registration-dossier/-/registered-dossier/16016/7/1
.
以下是本卷宗中可以找到的各种毒理学信息的列表,但我只对被称为DNELs的偏离点值(POD)感兴趣:
基本上复制一个答案给我提供了一段时间前,我有以下代码拉第一个豆荚。
Public Sub GetContents()
'Start ECHA Search via XML HTTP Request
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
XMLReq.Open "Get", "https://echa.europa.eu/registration-dossier/-/registered-dossier/16016/7/1", False
XMLReq.send
If XMLReq.Status <> 200 Then
MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
Exit Sub
End If
HTMLDoc.body.innerHTML = XMLReq.responseText
'Retrieve Data
'POD Population and Route
Set Info = HTMLDoc.getElementById("sWorkersHazardViaInhalationRoute")
Debug.Print Info.innerText
'POD Type
Set Info = HTMLDoc.getElementsByClassName("HorDL")(0)
Set data = Info.getElementsByTagName("dd")(0)
Debug.Print data.innerText
'POD Value
Set data = Info.getElementsByTagName("dd")(1)
Debug.Print data.innerText
End Sub
这项功能可以为第一条管理路线拉吊舱:WorkershardViadermalRoute
Workers - Hazard via inhalation route
DNEL (Derived No Effect Level)
238 mg/m³
这很好,但我真的希望能够对其进行调整,以拉动DNEL及其对每种管理方式的价值。这里用蓝色突出显示:
因此,在本例中,整个所需的输出将跨越3列(虽然只想提取数据,但现在在3列中并不重要):
Workers - Hazard via inhalation route, DNEL (Derived No Effect Level), 238 mg/m³
Workers - Hazard via dermal route, DNEL (Derived No Effect Level), 84 mg/kg bw/day
General Population - Hazard via inhalation route, DNEL (Derived No Effect Level), 70 mg/m³
General Population - Hazard via dermal route, DNEL (Derived No Effect Level), 51 mg/kg bw/day
General Population - Hazard via oral route, DNEL (Derived No Effect Level), 24 mg/kg bw/day
我遇到的问题是,我正在使用class元素“HorDL”来获取这些信息,但不幸的是,这个类并不局限于每个路由中以蓝色突出显示的部分。所以(“HorDL”)(0)工作查找,但(“HorDL”)(1)为同一条路线直接提取下面的信息。
出于这个原因,我怀疑使用这个class元素来获取信息不是最好的方法,但是我想不出任何其他方法来做到这一点。
我已经有了一种方法来提取相关的档案,所以如果这个方法有效的话,它将成为一个整洁的工具,只提取相关的信息。我考虑过提取所有信息,然后在excel中应用过滤器,但我认为这不是一个特别优雅的解决方案。
非常感谢您的回复。