【发布时间】:2012-03-16 09:55:00
【问题描述】:
我正在尝试使用 Python 在网站 (http://bibliotecadigitalhispanica.bne.es) 上自动下载一些 PDF。
我尝试过使用 urllib/urllib2/mechanize 模块(我一直在为其他网站使用:这包括标准函数,如 urlopen、urlretrieve 等),但在这里,链接在其 href 中嵌入了 JavaScript进行一些处理并打开 PDF 的属性,这些模块似乎无法处理,至少从我在这里阅读的内容来看。例如,当我执行以下操作时:
request = mechanize.Request('the example url below')
response = mechanize.urlopen(request)
它只是返回包含 HTML 页面 - 我似乎无法提取 PDF(该页面内也没有指向它的链接)。
通过查看真实浏览器中的标头(使用 Firefox 中的 LiveHTTPHeaders 扩展),我知道发出了大量 HTTP 请求,最终返回 PDF(并显示在浏览器中)。我希望能够拦截并下载它。具体来说,我收到了一系列 302 和 304 响应,最终导致 PDF。
这是我正在抓取的链接属性的示例: href='javascript:open_window_delivery("http://bibliotecadigitalhispanica.bne.es:80/verylonglinktoaccess");'
似乎如果我执行嵌入在 href 属性中的这个 JavaScript,我最终可以访问 PDF 文档本身。我已经尝试过使用 selenium,但它有点令人困惑——我不太确定在阅读它的文档时如何使用它。有人可以建议一种方法(通过我没有尝试过的模块或通过我拥有的模块)我可以做到这一点吗?
非常感谢您对此提供的任何帮助。
P.S.:如果您想查看我要复制的内容,我正在尝试访问下一页上提到的 PDF 链接(带有 PDF 图标的链接):): http://bibliotecadigitalhispanica.bne.es/R/9424CFL1MDQGLGBB98QSV1HFAD2APYDME4GQKCBSLXFX154L4G-01075?func=collections-result&collection_id=1356
【问题讨论】:
-
你能用正则表达式来提取uri吗?
-
我也试过这样做,从 JavaScript 函数调用中提取 URI,然后尝试使用 mechanize 和 urllib2 访问它,但到目前为止没有运气 - 它只是让我返回包含html 页面 :-/ 从查看标头来看,似乎有很多请求是用这个 URI 发出的,包括一些重定向。有没有办法抓住所有这些反应?也许这也可以解决问题。顺便说一句,谢谢您的回复。
-
更新:我最终通过找到最接近 PDF 文件的 URL 结构然后从这些 URL 重定向,在这个特定站点上找到了解决方法。干杯!
标签: javascript python mechanize urllib web-crawler