找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
Google-Bing-Mediago-Criteo开户
⚡️按条S5代理⚡️静态⚡️独享⚡️5G广告专用虚拟卡/U充值/高返点皇家代理IP⚡️#1性价比⚡️
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利买量投流开户独立站⚡️开户投放
Google FB TK游戏代投⚡️E.PN 虚拟卡⚡️BINOM TRACKER 60% OFF!比Adplexity还好用的Spy工具
ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理虚拟信用卡+独立站收款全球虚拟卡, 支持U充值
Facebook 批量上广告尤里改 - FB 稳定投放免费黑五教程(持续更新、欢迎交流)FB 三不限源头 - 自助下户充值转款
各种主页、账单户、BM户(优势)IPCola原生住宅IP⚡️$1.8/条双ISPFB资源,账单户,分享户,国内一手TK加白户/二解户/FB海外户/GG老户
海外CL企业户源头最大欧洲Nutra网盟BA找量 FB高权重耐操个号⚡️稳定过审GG,FB,TK, 欧美源头, 欢迎合作❤️
FB企业户海外户,授信户,TK加白户联盟收款/海外资金下发/服贸结汇⚡️Spend.net — 美元卡仅需$0⚡️✔Taboola海外户
广告位出租8500万高质量住宅IP,助力各种需求虚拟卡返佣1%,国内持牌机构 
查看: 23063|回复: 16

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

[复制链接]

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

发表于 2014-8-4 23:44:47 | 显示全部楼层 |阅读模式
用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件( Y& l* w3 N/ Y
  1. http://static.duoshuo.com/embed.js
复制代码
里面包含了一段参数,
* @0 p" f/ [8 A1 `+ w+ D) E
  1. h="cb_"+Math.round(Math.random()*1e6)
复制代码
生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。2 h; c! B; O$ R8 X& Q) Y
$ }9 M& _5 G& Y
请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。" f) S7 r+ W. `' F/ A

5 ?. s+ V8 j% R3 w5 ~5 L另外最好能详细一点,不甚感激。- g% e  J' |- K, E! b& N$ G0 }, l
相关帖子
回复

使用道具 举报

0

主题

488

广告币

1280

积分

高级会员

积分
1280
发表于 2014-8-5 00:07:58 | 显示全部楼层
试试casperjs模块? 无界面浏览器 可以解析js
7 S) A* Z- J! d7 M. N官网有很详细文档- ]/ X& m5 P- S% L0 v2 _9 n
  1. http://casperjs.org/
复制代码
% h- J/ {3 e+ g
"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"
4 Z: P- D3 [  p$ ?0 S
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 08:27:04 | 显示全部楼层
  1. import random) u7 j* ^. h! Z9 N2 ], ^/ T- W& A' z
  2. rand = random.randint(100000,999999)( ^4 L& C- m$ k" X
  3. print rand8 O, U$ k/ Z4 m
复制代码

) i# L3 S) y$ \生成六位随机数
, s; n: s* _! p( B7 S+ T
6 e6 _9 C+ e8 X. E8 l$ T1 N

点评

我需要获取js文件中生成的随机数,不是自己生成一个随机数  详情 回复 发表于 2014-8-5 08:47
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-5 08:47:35 | 显示全部楼层
阿百川 发表于 2014-8-5 08:27
! x2 j! j1 a/ Q生成六位随机数
1 X; O( q& h% f! C  Q9 s$ e2 A- M
我需要获取js文件中生成的随机数,不是自己生成一个随机数
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:07:01 | 显示全部楼层
fatiery 发表于 2014-8-5 08:47
0 I" I% U) q+ w9 U: J4 O7 }我需要获取js文件中生成的随机数,不是自己生成一个随机数
. c0 w  K3 W5 r1 n" t
这个只是随机生成的吧,又没什么验证. ^; g2 V+ P  Z1 W) \3 k! d

7 u+ W' r& w1 w) y. ^- G
  1. https://pypi.python.org/pypi/spynner
复制代码
& D# V9 d1 ~: R9 o  {1 A( A
利用webkit解析js

点评

有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在 中生成  详情 回复 发表于 2014-8-5 09:18
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-5 09:18:01 | 显示全部楼层
阿百川 发表于 2014-8-5 09:07, V$ T- b; L4 T+ z# a$ C
这个只是随机生成的吧,又没什么验证
4 |! i/ |7 Q5 q. j& Y
有验证的,我没写,这个是用get方式提交的
  1. 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在
3 F/ k/ r5 V5 a
  1. http://static.duoshuo.com/embed.js
复制代码
中生成  @" r4 S- \2 I& J* E7 M
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:33:04 | 显示全部楼层
fatiery 发表于 2014-8-5 09:188 O4 H; J! w- c- J$ F
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在+ j3 h% R9 s1 [1 o, h# L
中生成) ~$ z' A/ a: o9 e/ c) H' Z& X
...

6 t8 j+ f# q# h$ [9 F不解析js不好搞,还是用spynner吧
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-5 09:34:50 | 显示全部楼层
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
) b+ a; m9 J1 \0 o! p
+ d* E, p% @1 P" m- S* j" E; O6 ]方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量
: h" V3 E' S" v; f% I. M- y0 d

点评

方案1.执行效率比较低 方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网页的相关数据的,然后数据应该已经返回到它的服务器上,我提交的时候和服务器上的数据比对,相同才可以提  详情 回复 发表于 2014-8-6 01:06
回复 支持 反对

使用道具 举报

10

主题

1314

广告币

1376

积分

高级会员

积分
1376
发表于 2014-8-5 22:25:44 | 显示全部楼层
也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么

点评

ghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.py返回超时,无法下载网页的错误,打开百度就没问题。  详情 回复 发表于 2014-8-6 02:21
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 00:59:48 | 显示全部楼层
我目前还在研究中,这个问题困扰我2天了。。。
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 01:06:21 | 显示全部楼层
本帖最后由 fatiery 于 2014-8-6 01:26 编辑
, G: ]* B8 S$ x0 D6 X& J6 N
augustye 发表于 2014-8-5 09:34
: A; R3 ~. K  `9 J" R* R方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。0 K( n  H" K8 _" w

3 f1 ?% K# d7 H, ?% a方案2: ...

) Y. \" _) A% O5 i4 x) ?# w& N方案1.研究中。。。+ \/ U8 X3 @' \
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网页的相关数据的,然后数据应该已经返回到它的服务器上,我提交的时候和服务器上的数据比对,相同才可以提交成功。(我没学过js,这个是流程是我想象的,不是的话,请指出)
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 02:21:54 | 显示全部楼层
darren 发表于 2014-8-5 22:25/ t- o8 E2 w' v. s: z* ~4 t
也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 ...

( L  _. c! ]. n0 T* ^4 vghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.py
  1. from ghost import Ghost
    ! X+ _: O1 o8 D5 Y: z
  2. ghost = Ghost()
    ! I* N. E6 j) ~. y& z: j# X
  3. page, extra_resources = ghost.open("http://sayitout.net/item/10826.html")
复制代码
返回超时,无法下载网页的错误,打开百度就没问题。
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-6 06:34:01 | 显示全部楼层
fatiery 发表于 2014-8-6 01:06
2 ~" r$ ~  M/ s& ]1 s方案1.研究中。。。
1 j/ k: K0 C/ U5 J: x. ]1 M方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...
+ F; U  @$ v+ j5 I6 `6 ?* p/ y
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。
, J' o8 ?, g7 G+ v* @. v  Z7 B3 j/ _/ H" v( R; L
另:如果js文件里包含数据,那岂不是更简单,你直接抓取js文件,正则表达式匹配下就好了。

点评

如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。 这个js不直接包含数据,包含的是一个生成随机6位数字的  详情 回复 发表于 2014-8-6 12:12
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 12:12:30 | 显示全部楼层
本帖最后由 fatiery 于 2014-8-6 12:15 编辑
9 c: n9 w: W" C# q4 k
augustye 发表于 2014-8-6 06:34
( G7 ?+ w4 t2 E" O那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以 ...
5 d" a0 J9 o* R0 M
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。
9 S4 u* ]9 _; J2 A* L- [8 `  J# s: t; c7 M& o4 S2 a
这个js不直接包含数据,我现在需要的是这个js打开之后函数生成的6位随机数。我现在还是在用你方案1的方式,找些基于webkit开发的软件。找到一些不错的模块,但是中文的网页就报错。0 y6 }( y" s. h, _7 S

+ r6 l( N' ^9 w  t  J, |6 U& _如果愿意PM我你的QQ,我还有个技术问题求教。
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-6 15:18:14 | 显示全部楼层
fatiery 发表于 2014-8-6 12:12
7 B) G- D' ~1 V7 A0 ?  G- w如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如t ...

  k  L5 @; i2 q2 ^8 l' O其实吧,那个js文件里生成的随机数真的就是个随机数
; q7 g' n2 A! ^' U" S1 G/ E* D" C6 H) p4 _7 `% l4 k
var h="cb_"+Math.round(Math.random()*1e6);1 b, ^5 p8 _6 h' g2 z) k9 {7 Y

# q4 U6 ]3 }7 W7 Y/ f4 T- }没什么特别的。。。你完全可以用python生成。。。  [  s, W* I+ d! U  {: m/ H1 u
# ^$ |, k0 c, G" Y* v* ?
如果还需要讨论,把你的QQ发给我,我加你
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|联系我们|DMCA|广告服务|小黑屋|手机版|Archiver|Github|网站地图|AdvertCN

GMT+8, 2026-8-15 04:58 , Processed in 0.072985 second(s), 30 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

快速回复 返回顶部 返回列表