javascript - 使用R从javascript中提取数据

标签 javascript html r jsp web-scraping

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




感谢您对此感兴趣。

我被赋予了[繁琐的]任务来查看某些药物的原产国,因为它们已在哥伦比亚食品和药物管理局注册。该机构使用带有 javascript(.jsp 扩展名)的网站,我想知道是否可以自动化该过程。
这是查找的一步一步:

  • 前往代理网站:Agency's consult site
  • 在左侧的下拉列表中选择“Medicamentos”
  • 在“expendiente”(顶部最右边的框)下写下我们正在寻找的数字(我必须检查的 900+ 中的两个是:2203 和 3519)。单选按钮选择无关紧要。
  • 点击搜索按钮(“buscar”)
  • 点击下表中的链接
  • 理想情况下,获取以 FABRICANTE(制造商)开头的表格行,但能够保存文档就足够了(我计划稍后使用 R 获取/清理/分析数据)。
  • 点击清洁按钮(“新咨询”)
  • 从第 3 步到第 7 步重新开始。

  • 我不知道这是否可以实现,如果可以,如何实现;所以我很感激任何能让我从任何方向开始的指导(除了我现在手头的那个:用手看他们!)。我熟悉 R 和一些 VB,但如果可以用任何其他语言,我会试一试。

    我试过的:
  • 我试图找到与从 javascript 中提取数据相关的任何信息,但我发现的大部分信息都与使用 javascript 将数据从不同类型的数据库传递到 html/xml 中有关;或仅从一个响应中提取数据(这不是我想要自动化的部分,因为一旦我在响应中,很容易只查看值 [原产地]。“咨询”部分是最难!)。我感到如此偏离轨道,以至于我认为我对如何充分搜索一无所知。非常感谢指导/想法/初学者
  • 我用检查员(firefox)打开了该机构的网站,但在发现变量“expediente”是获得“expediente”值的变量后停止了(不是很有用!)。我不知道是否可能(以及如何)在页面上迭代以更改该变量的值。

  • 谢谢!

    最佳答案

    我用过phantomjsRSelenium包裹。有关如何设置的详细信息 phantomjs可以在 http://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-saucelabs.html#id2a 找到phantomjs可以直接驱动,无需 Selenium 服务器详细信息 here .由于它的 headless 性质,它应该更快地完成您概述的任务。

    您问题的第一部分可以实现如下:

    appURL <- "http://web.sivicos.gov.co:8080/consultas/consultas/consreg_encabcum.jsp"
    library(RSelenium)
    pJS <- phantom()
    remDr <- remoteDriver(browserName = "phantom")
    remDr$open()
    remDr$navigate(appURL)
    # Get the third list item of the select box (MEDICAMENTOS)
    webElem <- remDr$findElement("css", "select[name='grupo'] option:nth-child(3)")
    webElem$clickElement() # select this element
    # Send text to input value="" name="expediente
    webElem <- remDr$findElement("css", "input[name='expediente']")
    webElem$sendKeysToElement(list(2203))
    # Click the Buscar button
    remDr$findElement("id", "INPUT2")$clickElement()
    

    现在已经填写了表格并点击了链接。数据位于带有 name="datos" 的 iframe 中.
    iframes需要切换到:
    # switch to datos iframe
    remDr$switchToFrame(remDr$findElement("css", "iframe[name='datos']"))
    remDr$findElement("css", "a")$clickElement() # click the link given in the iframe
    
    # get the resulting data
    
    appData <- remDr$getPageSource()[[1]]
    # close phantom js
    pJS$stop()
    

    iframe 的数据现在包含在 appData 中。 .作为示例,我们使用简单的提取函数 readHTMLTable 查看第三个表。 :
    readHTMLTable(appData, which = 3)
    V1     V2      V3              V4       V5                      V6
    1 Presentacion Comercial   <NA>    <NA>            <NA>     <NA>                    <NA>
      2             Expediente Consec Termino Unidad / Medida Cantidad             Descripcion
    3              000002203     01    0176              ml    60,00  FRASCO AMBAR POR 60 ML
    4              000002203     02    0176              ml   120,00 FRASCO AMBAR POR 120 ML
    5              000002203     03    0176              ml    90,00  FRASCO AMBAR POR 90 ML
    V7     V8            V9
    1       <NA>   <NA>          <NA>
      2 Fecha insc Estado Fecha Inactiv
    3 2007/01/30 Activo              
    4 2007/01/30 Activo              
    5 2012/03/15 Activo 
    

    关于javascript - 使用R从javascript中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305824/

    相关文章:

    javascript - 在 javascript 中使用 parseInt 进行整数舍入

    html - 更改对象的背景图像 - html/css

    javascript - HTMl 导入自己的 WebComponent

    javascript - 页面加载时如何调用 AnimateScroll 插件?

    javascript - 单击元素外部的另一个链接时返回到先前状态的最有效方法是什么? (jQuery)

    javascript - 仅使用 javascript 将 HTML 转换为 PDF

    html - 如何使用新的 HTML5 <video> 去除 firefox 中视频顶部的灰色覆盖?

    R数据框按行列组合

    r - 解析时间戳 - AM/PM 无法识别

    r - 使用 data.table 按组标准化