在Google App Engine上模拟浏览器
我想在谷歌应用引擎里使用selenium或者windmill来抓取一个充满JavaScript的网站。我知道windmill是用Python和JavaScript写的。
这样做可能吗?如果可以的话,我该怎么把这个库插入进去?
如果不行,能不能解释一下原因,并给我一些替代方案?
谢谢。
更新
我又查了一下,发现scrapy是纯Python写的。
这样可以吗?它能处理JavaScript吗?
3 个回答
我认为Selenium和Windmill这两个工具只能让你控制一个浏览器,而不是模拟一个浏览器。它们是设计用来在桌面环境中运行,并且需要一个真实的浏览器,但在App Engine上你无法做到这一点。
你可以使用URL Fetch API和一个像BeautifulSoup这样的HTML解析器来处理从App Engine抓取网页的工作。
任何Python的“抓取”库在appengine上都不太可能能帮你理解JavaScript,因为这可能需要某种C扩展(就像与spidermonkey或v8的绑定),这会违反GAE的沙箱限制。
不过,如果你愿意尝试Java那边,可能会更顺利。我知道你可以在AppEngine上运行Rhino,再加上一点env.js的帮助,你可以模拟DOM。快速搜索一下,能找到一堆用Java写的抓取工具。这只是把这些东西结合起来的问题。
HtmlUnit 看起来就是想做到这一点,但目前不清楚它是否适合appengine,因为它似乎是多线程的。
Selenium和windmill(我觉得现在已经不再维护了)都是用来控制真实浏览器的工具。通常,它们会启动一个真实的浏览器(比如Firefox),然后对它进行控制。我觉得在AppEngine上是做不到这一点的。我所知道的最接近纯代码浏览器的工具是htmlunit,不过那是用Java写的。就我所知,Python没有类似的工具。