[求教]Python怎么获取网页中js生成的数据?
用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件http://static.duoshuo.com/embed.js里面包含了一段参数,
h="cb_"+Math.round(Math.random()*1e6)生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。
请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。
另外最好能详细一点,不甚感激。
试试casperjs模块? 无界面浏览器 可以解析js
官网有很详细文档
http://casperjs.org/
"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"
import random
rand = random.randint(100000,999999)
print rand
生成六位随机数
阿百川 发表于 2014-8-5 08:27
生成六位随机数
我需要获取js文件中生成的随机数,不是自己生成一个随机数 fatiery 发表于 2014-8-5 08:47
我需要获取js文件中生成的随机数,不是自己生成一个随机数
这个只是随机生成的吧,又没什么验证
https://pypi.python.org/pypi/spynner
利用webkit解析js 阿百川 发表于 2014-8-5 09:07
这个只是随机生成的吧,又没什么验证
有验证的,我没写,这个是用get方式提交的http://参数1.duoshuo.com/api/posts/create.jsonp?thread_id=参数2&parent_id=&nonce=参数3&message=参数4&repost=netease&v=140327&_method=POST&callback=DUOSHUO%5B'cb_参数5'%5D我现在就是要获取参数5,参数5在
http://static.duoshuo.com/embed.js中生成
fatiery 发表于 2014-8-5 09:18
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在
中生成
...
不解析js不好搞,还是用spynner吧 方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量
也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 我目前还在研究中,这个问题困扰我2天了。。。 本帖最后由 fatiery 于 2014-8-6 01:26 编辑
augustye 发表于 2014-8-5 09:34
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
方案2: ...
方案1.研究中。。。
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网页的相关数据的,然后数据应该已经返回到它的服务器上,我提交的时候和服务器上的数据比对,相同才可以提交成功。(我没学过js,这个是流程是我想象的,不是的话,请指出) darren 发表于 2014-8-5 22:25
也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 ...
ghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.pyfrom ghost import Ghost
ghost = Ghost()
page, extra_resources = ghost.open("http://sayitout.net/item/10826.html")返回超时,无法下载网页的错误,打开百度就没问题。 fatiery 发表于 2014-8-6 01:06
方案1.研究中。。。
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。
另:如果js文件里包含数据,那岂不是更简单,你直接抓取js文件,正则表达式匹配下就好了。 本帖最后由 fatiery 于 2014-8-6 12:15 编辑
augustye 发表于 2014-8-6 06:34
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以 ...
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。
这个js不直接包含数据,我现在需要的是这个js打开之后函数生成的6位随机数。我现在还是在用你方案1的方式,找些基于webkit开发的软件。找到一些不错的模块,但是中文的网页就报错。
如果愿意PM我你的QQ,我还有个技术问题求教。 fatiery 发表于 2014-8-6 12:12
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如t ...
其实吧,那个js文件里生成的随机数真的就是个随机数
var h="cb_"+Math.round(Math.random()*1e6);
没什么特别的。。。你完全可以用python生成。。。
如果还需要讨论,把你的QQ发给我,我加你
页:
[1]
2