try:
output = ''
for result in runProcess([self.runProcess,
self.runScript,
self.jobId,
self.protocol,
self.hostname,
self.queryString]):
output += '' + result
print output
except Exception as e:
print e
print(traceback.format_exc())
使用子进程Popen执行二进制文件的位置:
def runProcess(exe):
p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while(True):
retcode = p.poll() #returns None while subprocess is running
line = p.stdout.readline()
yield line
if(retcode is not None):
break
挑战在于,一旦数据被web浏览器呈现出来,就要读取数据,这需要一些额外的技巧。如果您可以查看站点是否具有预渲染版本*或API。在
This article (linked from the Web archive)对您需要做的事情进行了很好的分解。但可以概括为:
*小题大做-希望得到一个静态网页的预渲染版本的想法激怒了我。
你不能只使用Python。您需要一个JavaScript引擎API,比如PhantomJS
使用Phantom,将非常容易地设置所有页面内容的web抓取,静态和动态JavaScript内容(如Ajax调用结果在您的情况下)。事实上,您可以像(这是一个节点.js+ 幻影.js示例)
此时,您可以完全控制正在进行的操作,以及在页面中何时需要下载,如:
^{pr2}$如您所见,您可以定义页面处理程序并控制流以及加载到该页面上的资源。因此,在获取整个页面源之前,您可以确保所有数据都已准备好并设置好,例如:
在这里您可以看到onSuccess回调中加载的整个页面内容:
该页面直接来自Phantomjs,如下代码片段所示:
当然,这是给你和你的想法,你可以做什么节点.js+幻影,当结合在一起的时候是超级强大的。在
可以在Python环境中运行phantomjs,将其称为
使用子进程Popen执行二进制文件的位置:
当然,要运行的过程是节点.js在这种情况下
用你需要的参数作为参数。在
相关问题 更多 >
编程相关推荐