我尝试在网站上的 python 中进行网络抓取(使用 spynner 和 BeautifulSoup)。在某些时候,我想测试由以下 html 查询触发的 zip 文件下载:
https://mywebsite.com/download?from=2011&to=2012
如果在浏览器 (chrome) 中明确使用,这将触发下载具有给定名称的 zip 文件。我无法使用无头浏览器重现此行为。我知道这不是正确的方法,而是使用 spynner 之类的方法:
from spynner import Browser
b = Browser()
b.load(webpage,wait_callback=wait_page_load, tries=3)
b.load_jquery(True)
...
output = b.load("https://website.com/download?from=2011&to=2012")
print b.html
>> ...
当然不起作用(没有 zip 文件下载)。最后一个打印语句显示我最终出现在一个错误页面上,并带有一个 java 异常堆栈。
有没有办法
- 在不使用 spynner 加载机制的情况下正确调用 html 查询?
- 捕获生成的 zip 文件?
- 用选定的名称下载它?
谢谢你的帮助。
在使用 java 调试器对 chrome 进行一些测试后,最后一件事是在浏览器中执行此操作时出现以下警告:
Resource interpreted as Document but transferred with MIME type application/zip "https://mywebsite.com/download?from=2011&to=2012"
编辑:
发现拨打的电话是:
https://mywebsite.com/download?from=10%2F18%2F2011&to=10%2F18%2F2012
可以在浏览器中使用,应替换为
https://mywebsite.com/download?from=10/18/2011&to=10/18/2012
不能在 python 中使用,因为 URL 编码会映射%2F
到%252F