我正在开发一个scrapy应用程序来废弃网页上的一些数据
但是ajax加载了一些数据,因此python无法执行它来获取数据。
是否有任何模拟浏览器行为的库?
答案 0 :(得分:4)
为此,您必须使用功能齐全的Javascript引擎(如Chrome中的Google V8),以获取浏览器的真实功能及其交互方式。但是,您可以通过查找源中的所有URL并向每个URL发送请求来获取一些信息,希望获得一些有效数据。但总的来说,你没有一个完整的Javascript引擎就陷入困境。
像python-spidermonkey之类的东西。 Mozilla的Javascript引擎的包装器。但是使用它可能相当复杂,但这取决于您的具体应用。
你基本上必须构建一个浏览器,但似乎Python人们已经使它变得简单。使用PyWebkitGtk你可以获得dom并使用前面提到的python-spidermonkey或者Duncan提到的PyV8,理论上你可以获得浏览器/ webscraper所需的全部功能。
答案 1 :(得分:3)
问题在于你不仅必须能够执行一些Javascript(这很容易),你还必须模拟浏览器DOM,这是很多工作。
如果您希望能够运行Javascript,那么您可以使用PyV8。使用easy_install PyV8
安装它,然后您就可以执行任何独立的javascript:
>>> import PyV8
>>> ctxt = PyV8.JSContext()
>>> ctxt.enter()
>>> ctxt.eval("(function(a,b) { return [a+b, a*b, a/b, a-b] })(13,29)")
<_PyV8.JSArray object at 0x01F26A30>
>>> list(_)
[42, 377, 0.4482758620689655, -16]
您还可以传入Python中定义的类,因此原则上可以为您的目的模拟足够的DOM。
答案 2 :(得分:2)
AJAX请求是异步执行的普通Web请求。您只需要JavaScript代码发送给服务器的URL。将该网址与urllib一起使用即可获得相同的数据。
答案 3 :(得分:2)
完成工作的最简单方法是使用'PyExecJS'。 https://pypi.python.org/pypi/PyExecJS
PyExecJS是Ruby中ExecJS的移植。 PyExecJS自动选择可用于评估JavaScript程序的最佳运行时,然后将结果作为Python对象返回给您。
我使用Macbook并安装了node.js,因此pyexecjs可以使用node.js javascript运行时。
pip install PyExecJS
测试代码:
导入execjs execjs.eval(“'red yellow blue'.split('')”)
祝你好运!答案 4 :(得分:0)
i我查看了Google搜索推荐的结果。原来最好的选择是#4,然后不建议使用#1#2!