联合国秘书长和其他机构每年向大会发布数百份报告,这些报告没有统一的清单,就像其他文件一样。但是,有一个简化的网址,用于使用文档代码http://undocs.org/[document code]
阅读这些报告,文档代码的格式为A/[Session]/[Document Number]
。一个示例文档代码将是" A / 71/1"并且访问它的网址将是" https://undocs.org/A/71/1"。
我尝试在过去15年中下载所有这些文档,但我不想手动输入其中的每一个,而是想设置一个Google Apps脚本来为我完成。
当我尝试使用简单方法UrlFetchApp.fetch("http://undocs.org/A/71/1");
时,它会获取一个错误页面,说明我正在使用未经授权的方法访问该页面。如果您阻止Cookie,或者有时当您尝试在隐身窗口中访问该页面时显示相同的页面。
现在,我不打算入侵联合国,只是下载一些可供公众访问的PDF。我需要弄清楚我需要通过.fetch()
方法传递哪种参数才能获得页面授权的请求。
注意:我搜索了undocs.org网站寻找任何指导,但我找不到。
尝试使用Google Apps脚本中的UrlFetchApp访问联合国正式文件系统,但我无法弄清楚如何获得授权请求。
答案 0 :(得分:1)
简短回答 - 我认为你不能用单行fetch
获得它。
如果您查看提取https://undocs.org/A/71/1
时返回的HTML,您会看到它嵌入了一个从https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=A/71/1&Lang=E
获取其内容的框架。然后,如果您查看该框架返回的HTML,您将看到两件事:
https://documents-dds-ny.un.org/prod/ods_mother.nsf?Login&Username=freeods2&Password=1234
https://documents-dds-ny.un.org/doc/UNDOC/GEN/N16/206/02/PDF/N1620602.pdf?OpenElement
我假设第一个链接设置了一个cookie,表明登录已经发生,然后第二个链接在返回内容之前进行验证。
你可以尝试的事情:
多步骤fetch
,您首先从undocs.org
获取内容,解析它以获取实际PDF的链接,然后登录并获取PDF。但Google Apps脚本必须在提取之间保留Cookie。
将您的脚本编写在不同的工具(例如Python)中。
使用蜘蛛/抓取工具导航UN网站,就好像它是真人一样。