fatiery 发表于 2014-8-4 23:44:47

[求教]Python怎么获取网页中js生成的数据?

用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件
http://static.duoshuo.com/embed.js里面包含了一段参数,
h="cb_"+Math.round(Math.random()*1e6)生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。

请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。

另外最好能详细一点,不甚感激。

Smythe_Bob 发表于 2014-8-5 00:07:58

试试casperjs模块? 无界面浏览器 可以解析js
官网有很详细文档
http://casperjs.org/
"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"

阿百川 发表于 2014-8-5 08:27:04

import random
rand = random.randint(100000,999999)
print rand

生成六位随机数

fatiery 发表于 2014-8-5 08:47:35

阿百川 发表于 2014-8-5 08:27
生成六位随机数

我需要获取js文件中生成的随机数,不是自己生成一个随机数

阿百川 发表于 2014-8-5 09:07:01

fatiery 发表于 2014-8-5 08:47
我需要获取js文件中生成的随机数,不是自己生成一个随机数

这个只是随机生成的吧,又没什么验证

https://pypi.python.org/pypi/spynner
利用webkit解析js

fatiery 发表于 2014-8-5 09:18:01

阿百川 发表于 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中生成

阿百川 发表于 2014-8-5 09:33:04

fatiery 发表于 2014-8-5 09:18
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在
中生成
...

不解析js不好搞,还是用spynner吧

augustye 发表于 2014-8-5 09:34:50

方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。

方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量

darren 发表于 2014-8-5 22:25:44

也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么

fatiery 发表于 2014-8-6 00:59:48

我目前还在研究中,这个问题困扰我2天了。。。

fatiery 发表于 2014-8-6 01:06:21

本帖最后由 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,这个是流程是我想象的,不是的话,请指出)

fatiery 发表于 2014-8-6 02:21:54

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")返回超时,无法下载网页的错误,打开百度就没问题。

augustye 发表于 2014-8-6 06:34:01

fatiery 发表于 2014-8-6 01:06
方案1.研究中。。。
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...

那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。

另:如果js文件里包含数据,那岂不是更简单,你直接抓取js文件,正则表达式匹配下就好了。

fatiery 发表于 2014-8-6 12:12:30

本帖最后由 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,我还有个技术问题求教。

augustye 发表于 2014-8-6 15:18:14

fatiery 发表于 2014-8-6 12:12
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如t ...

其实吧,那个js文件里生成的随机数真的就是个随机数

var h="cb_"+Math.round(Math.random()*1e6);

没什么特别的。。。你完全可以用python生成。。。

如果还需要讨论,把你的QQ发给我,我加你
页: [1] 2
查看完整版本: [求教]Python怎么获取网页中js生成的数据?