找回密码
 立即注册

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%,国内持牌机构 
查看: 23061|回复: 16

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

[复制链接]

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

发表于 2014-8-4 23:44:47 | 显示全部楼层 |阅读模式
用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件
- [$ k  ^* m. T$ H. \2 W
  1. http://static.duoshuo.com/embed.js
复制代码
里面包含了一段参数,/ m* W3 n. k5 V/ O8 E# I
  1. h="cb_"+Math.round(Math.random()*1e6)
复制代码
生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。2 C: A$ h1 Y7 L+ P. y- |
2 L5 Z0 D" A6 a
请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。
0 u: h0 _/ R1 T) D6 J- a
2 w7 d% K  k2 w& S另外最好能详细一点,不甚感激。
2 e7 h( z" p/ d) V5 Q: ^
相关帖子
回复

使用道具 举报

0

主题

488

广告币

1280

积分

高级会员

积分
1280
发表于 2014-8-5 00:07:58 | 显示全部楼层
试试casperjs模块? 无界面浏览器 可以解析js 6 _0 h0 G7 W/ j7 z
官网有很详细文档
5 U8 U) b) Q5 \4 M3 ]$ w
  1. http://casperjs.org/
复制代码
& s# P* [- {" [! K9 [! m
"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"" r7 t& _2 F' l& c. F# C& ~
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 08:27:04 | 显示全部楼层
  1. import random
    * P4 d) f( |/ v7 k) O. A  J
  2. rand = random.randint(100000,999999)
    & I% t$ S1 F8 @4 P# W7 _
  3. print rand
    / o5 f/ J# B% g) F
复制代码

6 }" ?2 M  m  U" f. r5 G: Q生成六位随机数
% y. f* B: M% p  i' v- Q$ Q3 s
# L# b5 b  e  v+ C; `; U) A: q

点评

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

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-5 08:47:35 | 显示全部楼层
阿百川 发表于 2014-8-5 08:27
7 g4 {' c% `/ H5 o生成六位随机数
  ~' z! I* N7 K) ~1 s( f- I. h
我需要获取js文件中生成的随机数,不是自己生成一个随机数
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:07:01 | 显示全部楼层
fatiery 发表于 2014-8-5 08:47
# H; s6 [* @5 c% d9 L# t# P* f: B我需要获取js文件中生成的随机数,不是自己生成一个随机数

+ @- L7 B. s1 y- }+ y5 [, i6 K这个只是随机生成的吧,又没什么验证
" A% W4 @7 r0 s- C& b  p9 L! v
; Z) v4 H* ~* i: }: H. r
  1. https://pypi.python.org/pypi/spynner
复制代码

! j' b5 |  ?% Q1 ~利用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
  e$ }1 ]& D: ]$ c, s/ L& b这个只是随机生成的吧,又没什么验证
8 _4 X" k# d0 O2 F  Z6 ^
有验证的,我没写,这个是用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在
$ g" c% C' u. d6 z/ L
  1. http://static.duoshuo.com/embed.js
复制代码
中生成
7 m" y! D/ z+ Q) S+ c* Y1 R
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:33:04 | 显示全部楼层
fatiery 发表于 2014-8-5 09:189 S8 V+ w' x: T! h7 _
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在, a; f% |, r. s7 O
中生成
4 J- c6 f: w1 g( L9 w8 v/ ? ...
/ W- m; _) n- p" C
不解析js不好搞,还是用spynner吧
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-5 09:34:50 | 显示全部楼层
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
( y: M9 @, {1 Y6 y- Z+ B4 v5 }  A0 C, m8 M# [* L  h3 Q
方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量; k* ?9 f6 N* x0 |9 |$ u5 J0 S

点评

方案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 编辑
- E- M. d% q- l' V+ H, T7 F
augustye 发表于 2014-8-5 09:34/ M0 r: j# h$ A) k, O1 e  y! `8 W
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。  t4 {2 ?' W3 ]0 G+ \3 V
) b: u6 \9 N9 p! v# k; x4 E
方案2: ...

; ]( Q, @3 Y: R1 l7 {9 e/ u方案1.研究中。。。" h6 w7 |, K7 X9 O2 s: F4 f9 `
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网页的相关数据的,然后数据应该已经返回到它的服务器上,我提交的时候和服务器上的数据比对,相同才可以提交成功。(我没学过js,这个是流程是我想象的,不是的话,请指出)
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 02:21:54 | 显示全部楼层
darren 发表于 2014-8-5 22:25
8 Z; N$ t+ n! t9 R" c" ?; ^也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 ...

) K( N$ x6 u7 m0 f9 V' qghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.py
  1. from ghost import Ghost
    7 y1 p; E$ {) p- [
  2. ghost = Ghost()
    8 ]/ T6 b+ B  [8 V, E
  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, |3 C* O* c) r
方案1.研究中。。。
2 p+ d9 s, E9 F, r$ X& ?方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...
4 E  F5 [7 S2 k6 z; \3 t; y
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。
+ ^& g# l( a2 V, v0 R( V  r  r- A0 I! ~/ Q- M
另:如果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 编辑 1 Z' f/ O& [2 B! c
augustye 发表于 2014-8-6 06:34& V$ T: H" ?' E5 a# b
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以 ...
7 b3 f: S6 C8 j, b  _1 W
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。
7 O$ R: G8 ~5 I1 Z/ G$ u# l# S" @. b+ K+ S
这个js不直接包含数据,我现在需要的是这个js打开之后函数生成的6位随机数。我现在还是在用你方案1的方式,找些基于webkit开发的软件。找到一些不错的模块,但是中文的网页就报错。
& j8 X  V, E. N# n7 B/ g; x; @, U  U& l6 M
如果愿意PM我你的QQ,我还有个技术问题求教。
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-6 15:18:14 | 显示全部楼层
fatiery 发表于 2014-8-6 12:12
* r# Z! I4 t& B; h: |' d( O如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如t ...
2 Q; ~& ?0 L" U9 ]3 d& S; Y
其实吧,那个js文件里生成的随机数真的就是个随机数$ l( O. y* i% y* l
  Y1 n, ^% g# Z3 k" l" `: g7 @3 H
var h="cb_"+Math.round(Math.random()*1e6);' M2 B8 H, Y! H. U# G

4 L+ W! N! J& m: ^. W没什么特别的。。。你完全可以用python生成。。。
, }( I$ u* E) m* I
* D4 m7 f: O9 W如果还需要讨论,把你的QQ发给我,我加你
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-15 04:26 , Processed in 0.108230 second(s), 36 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

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