抓取ajax动态网页java(实现成果实现思路我主要是借鉴了博客的思路)
优采云 发布时间: 2021-11-23 23:22抓取ajax动态网页java(实现成果实现思路我主要是借鉴了博客的思路)
取得成果
实现思路
我主要借鉴了这个博客的想法
让我简要描述一下他的想法。他的前端使用ajax异步请求。一种用于获取冗长的数据。比如我要在后台运行一千个统计,这需要很长时间。另一种是周期性的ajax。每隔一段时间去后台访问一下数据。后台巧妙的部分是打开一个全局变量来存储程序的运行状态。伪代码如下
全局变量s
主函数(前端请求这个链接需要比较长的时间才能返回数据):
s=0
''''
后台处理数据
''''
s=10
''''
后台处理数据
''''
如此重复
最后返回数据的时候s=100
辅助函数:
返回s的值
这是他的实现思路,就是通过全局变量来检测主函数,告知辅助函数主函数跑了哪一步。
两个ajxa用的很巧妙,很简单的实现方式
他山的石头可以用来做玉
他想法的问题是没有考虑并发,同一个全局变量s不能在多个用户下使用。
我的想法之一
众所周知,每个用户都有一个独立的会话,那么把这个全局变量保存在会话中就可以了,互不干扰。
思路肯定没问题,但是被ajax机制坑了。ajax异步请求的时候,不执行后台函数的情况下是无法更新session的。这导致辅助功能无法访问尚未完成主功能的会话。
我的第二个想法
然后会话不起作用。我只是将全局变量更改为地图。前端的两个ajax在访问后台的时候,带了一个过去的随机数,作为map的key,全局变量作为map的value,这样随机数之间的冲突就很小了。可以,后台执行进度可以并发访问
前端伪代码
ajax1:
异步访问主函数
传递一个随机数seed
等待数据返回并显示
杀死定时器
定时器:
ajax2:
异步访问辅助函数
传递一个随机数seed
拿到后台map中的全局变量
更改进度条显示为全局遍历的值
使用flask框架踩到的一些坑
一、开启flask的多线程
第二阶段是单线程,前端异步访问,后端在处理main函数的时候没时间考虑辅助函数。
app.run(debug=True, threaded=True)
对于前端表单,JavaScript处理完后返回false,否则JavaScript会一次提交到后端,html表单再次提交。. .
在前端表单表单中设置pattern值后,先由JavaScript处理click事件,然后再处理pattern。因此,JavaScript 也必须正则匹配。如果成功,它将返回false。如果失败,它将返回true。图案被处理。输入标签自带前端提示