【发布时间】:2014-12-04 23:02:00
【问题描述】:
感谢您对此感兴趣。
我被赋予了 [繁琐的] 任务来查看某些药物的原产国,因为它们已在哥伦比亚食品和药物管理局注册。该机构使用带有 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”值的变量后就停止了(不是很有用!)。我不知道是否可能(以及如何)在页面上进行迭代以更改该变量的值。
谢谢!
【问题讨论】:
-
R 的硒包之一是您最好的选择。该网站已竭尽全力防止抓取。
-
@hrbmstr 感谢您的领导。我安装了 RSelenium,到目前为止已经能够打开页面,在框中输入数字并再次清除表单。我想在结果表的一个单元格中获取值,唯一的选择器是
body > form:nth-child(1) > table:nth-child(4) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(6),但还没有找到方法。我尝试使用findElement("css selector",uniqueselector)和findElements("css selector",uniqueselector),但这些都不是。你能在这里再给我一点智慧吗?谢谢! -
当我执行上面解释的代码时,我得到一个空列表。如果我输入
list(uniqueselector)而不是uniqueselector,那么我得到一个java.lang.ClassCastException。当我执行htmlParse(rd$getPageSource()[[1]])时,我得到了很多东西,但没有得到表格的内容(这是我感兴趣的)。再次感谢
标签: javascript html r jsp web-scraping