提问人:lawsq 提问时间:12/7/2021 最后编辑:Nad Patlawsq 更新时间:12/8/2021 访问量:155
如何抓取/抓取(使用 R)非表 EPA CompTox 仪表板?
How can I crawl/scrape (using R) the non-table EPA CompTox Dashboard?
问:
EPA CompTox Chemical Dashboard 收到了更新,我的旧代码不再能够抓取化学品的沸点。有没有人能帮我刮掉实验平均沸点?我需要能够编写一个可以循环使用多种化学物质的 R 代码。
示例网页: 丙酮:https://comptox.epa.gov/dashboard/chemical/properties/DTXSID8021482
甲烷:
https://comptox.epa.gov/dashboard/chemical/properties/DTXSID8025545
我试过了,但没有成功。实验平均沸点 (ExpAvBP) 值不会显示在 XML 中。read_html()
xmlParse()
我试过从 ,但无论我尝试什么,它都只返回 NA。此外,这仅适用于列出的第一个网页,因为单元格 ID 随每种化学物质而变化。ContentScraper()
RCrawler
ContentScraper(Url="https://comptox.epa.gov/dashboard/chemical/properties/DTXSID8021482", XpathPatterns = "//*[@id='cell-225']")
我尝试过使用 ,但信息都塞进了最后一个脚本标签中,我不确定如何仅隔离 ExpAvBP 值。看起来值存储在其他地方?例如,下面是我认为最后一个脚本标签中的沸点信息。readLines()
丙酮:
{unit:c_,name:“沸点”,预测:{rawData:[{value:c$,minValue:e,maxValue:e,source:am,description:an,modelName:“TEST_BP”,modelId:T,hasOpera:d,globalApplicability:e,hasQmrfPdf:d,details:{value:B,link:“https:\u002F\u002Fs3.amazonaws.com\u002Fepa-comptox\u002Ftest-reports\u002FDTXCID101482-TEST_BP.html”,showLink:a},qmrf:{value:e,link:e,showLink:d}},{value:44.8,minValue:e,maxValue:e,source:ci,描述:cj,modelName:“EPISUITE_BP”,modelId:dV,hasOpera:d,globalApplicability:e,hasQmrfPdf:d,details:{value:M,link:e,showLink:d},qmrf:{value:e,link:e,showLink:d}},{value:46.458,minValue:e,maxValue:e,source:ad,description:V,modelName:“ACD_BP”,modelId:135,hasOpera:d,globalApplicability:e,hasQmrfPdf:d,details:{value:M,link:e,showLink:d},qmrf:{value:e,link:e,showLink:d}},{value:da,minValue:e,maxValue:e,source:aL,description:bo,modelName:“OPERA_BP”,modelId:dS,hasOpera:a,globalApplicability:q,hasQmrfPdf:a,details:{value:B,link:“http://u002F\u002Fcomptox-dev.epa.gov\u002Fdashboard\u002Fdsstoxdb\u002Fcalculation_details?model_id=27&search=21482”,showLink:a},qmrf:{value:B,link:“http://u002F\u002Fcomptox-dev.epa.gov\u002Fdashboard\u002Fdsstoxdb\u002Fdownload_qmrf_pdf?model=27”,showLink:a}}],count:bu,mean:47.06289999999999,min:c$,max:da,range:[c$,da],median:45.629},experimental:{rawData:[{value:db,minValue:e,maxValue:e,source:aN,description:aO,experimentalDetails:[]},{value:ak,minValue:ak,maxValue:ak,source:ck,description:cl,experimentalDetails:[]},{value:ak,minValue:ak,maxValue:ak,source:ck,description:cl,experimentalDetails:[]},{value:ak,minValue:ak,maxValue:ak,资料来源:“联合国粮食及农业组织”,描述:“粮农组织-世卫组织食品添加剂联合专家委员会(JECFA)是由联合国粮食及农业组织(FAO)和世界卫生组织(WHO)共同管理的国际专家科学委员会。网站: \u003Ca href=“http://u002F\u002Fwww.fao.org\u002Fhome\u002F” target=“_blank”\u003Ehttp:\u002F\u002Fwww.fao.org\u002Fhome\u002F\u003C\u002Fa\u003E“,experimentalDetails:[]},{value:56.05,minValue:e,maxValue:e,source:”Abooali et al. Int. J. Refrig.2014, 40, 282–293“,描述:”Abooali, D.;Sobati, M. A. 预测纯制冷剂正常沸点和正常沸点下汽化焓的新方法:QSPR 方法。(\u003Ca href=“http://u002F\u002Fdx.doi.org\u002F10.1016\u002Fj.ijrefrig.2013.12.007” target=“_blank”\u003EInt. J. Refrig. 2014, 40, 282–293\u003C\u002Fa\u003E)\r\n“,experimentalDetails:[]},{value:bO,minValue:bO,maxValue:bO,source:hI,description:hJ,experimentalDetails:[]}],count:dK,mean:55.9851833333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 BOILING_POINT 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
甲烷:
{unit:cO,name:“沸点”,预测:{rawData:[{value:at,minValue:f,maxValue:f,source:bB,description:bb,modelName:“ACD_BP”,modelId:135,hasOpera:d,globalApplicibility:f,hasQmrfPdf:d,details:{value:ag,link:f,showLink:d},qmrf:{value:f,link:f,showLink:d}},{value:hl,minValue:f,maxValue:f,source:aF,description:ba,modelName:“OPERA_BP”,modelId:dv,hasOpera:a,globalApplicibility:s,hasQmrfPdf:a,details:{value:O,link:“http://u002F\u002Fcomptox-dev.epa.gov\u002Fdashboard\u002Fdsstoxdb\u002Fcalculation_details?model_id=27&search=25545”,showLink:a},qmrf:{value:O,link:“http://u002F\u002Fcomptox-dev.epa.gov\u002Fdashboard\u002Fdsstoxdb\u002Fdownload_qmrf_pdf?model=27”,showLink:a}},{value:cP,minValue:f,maxValue:f,source:bZ,description:b_,modelName:“EPISUITE_BP”,modelId:dy,hasOpera:d,globalApplicibility:f,hasQmrfPdf:d,details:{value:ag,link:f,showLink:d},qmrf:{value:f,link:f,showLink:d}}],count:bH,mean:-129.253000000000001,min:at,max:cP,range:[at,cP],median:hl},experimental:{rawData:[{value:at,minValue:at,maxValue:at,source:hm,description:hn,experimentalDetails:[]},{value:cQ,minValue:f,maxValue:f,source:bC,description:bD,experimentalDetails:[]}],count:H,mean:ho,min:at,max:cQ,range:[at,cQ],median:ho},arrKey:“BOILING_POINT”}
任何帮助或见解将不胜感激!
答:
由于数据没有表格格式,我们必须通过匹配模式来提取文本并提取沸腾温度。BoilingPoint
library(rvest)
library(dplyr)
library(RSelenium)
url = 'https://comptox.epa.gov/dashboard/chemical/properties/DTXSID8025545'
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
remDr$navigate(url)
df = remDr$getPageSource()[[1]] %>%
read_html() %>% html_nodes(xpath = '//*[@id="__layout"]/div/div[5]/div[2]/main/div/div[3]/div[2]/div/div[2]/div[2]/div[3]') %>%
html_text()
现在得到沸腾温度。引用 https://stackoverflow.com/a/35936065/12135618
df1 = df %>% str_remove_all( '\n') %>% str_replace_all( ' ', '')
as.numeric(sub(".*?BoilingPoint.*?(\\d+).*", "\\1", df1))
[1] 163
您可能需要进行进一步的微调才能获得沸腾温度的小数点。
评论