找回密码
 立即注册

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老户
最大欧洲Nutra网盟BA找量 FB高权重耐操个号⚡️稳定过审FB企业户海外户,授信户,TK加白户联盟收款/海外资金下发/服贸结汇
✔Taboola海外户源头广告位出租虚拟卡返佣1%,国内持牌机构 
查看: 23199|回复: 16

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

[复制链接]

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

发表于 2014-8-4 23:44:47 | 显示全部楼层 |阅读模式
Binom_AdvertCN
用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件: f: h* |( P3 ~1 U2 M5 G9 a7 f$ K
  1. http://static.duoshuo.com/embed.js
复制代码
里面包含了一段参数,0 [6 Q; K5 b. V! u! q
  1. h="cb_"+Math.round(Math.random()*1e6)
复制代码
生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。1 e" E% w% ~. J4 y+ _6 h
6 X- ?$ X9 c- I. ~/ C
请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。
0 }+ e$ t  ]: O- ^9 a5 Z9 L* [1 S: L5 a
另外最好能详细一点,不甚感激。# p# r" q! u; n$ T6 Y1 @+ P
相关帖子
空
回复

使用道具 举报

0

主题

488

广告币

1280

积分

高级会员

积分
1280
发表于 2014-8-5 00:07:58 | 显示全部楼层
试试casperjs模块? 无界面浏览器 可以解析js
1 z9 c3 r. [% n9 ~- d官网有很详细文档
- o9 J7 T% Y2 p2 H/ T" w, s
  1. http://casperjs.org/
复制代码

! @8 f0 ^) e1 W% E  o"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"
. y! ^& [  G6 [7 X6 z1 T& b
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 08:27:04 | 显示全部楼层
  1. import random
      M- U( S5 v  Z8 ^2 k. L7 |
  2. rand = random.randint(100000,999999)
    ; {* U& u2 w, Y) ?( i, W
  3. print rand
    - ^5 c4 d& X) g
复制代码

2 L! ?/ X6 P% W+ e+ @8 J生成六位随机数  `# L! D" i4 o( ~
! [. l" x6 O! u$ S# g3 d7 x

点评

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

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-5 08:47:35 | 显示全部楼层
阿百川 发表于 2014-8-5 08:273 E( V  X8 L: \, g9 w) l
生成六位随机数

4 B) y! ?! f( G8 y  b$ @  A我需要获取js文件中生成的随机数,不是自己生成一个随机数
空
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:07:01 | 显示全部楼层
fatiery 发表于 2014-8-5 08:47
3 c6 Z" m3 k6 B+ A; _7 j' s, A2 P我需要获取js文件中生成的随机数,不是自己生成一个随机数
  m. U0 f% V2 O6 G9 y' u
这个只是随机生成的吧,又没什么验证- X# B. T  B0 a6 b# b. E, l/ {( b
/ G; G9 M0 l9 F; c4 E0 e; s4 C
  1. https://pypi.python.org/pypi/spynner
复制代码

* A* I8 a- A) x' M利用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) S: G4 w( e% r, D) a
这个只是随机生成的吧,又没什么验证

- i2 I: }* v2 O% K' h( z有验证的,我没写,这个是用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在) @1 b8 Z! y# B2 P. t
  1. http://static.duoshuo.com/embed.js
复制代码
中生成
/ ~. a" z% n) K; h- b; Y
空
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:33:04 | 显示全部楼层
fatiery 发表于 2014-8-5 09:18* s! f/ \; l6 J9 @# P7 `8 t
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在- I" N4 l$ Z. ~3 M0 l
中生成- Y: G* t  v- n* l- ~5 \
...
  J: @5 o6 ?* i( X
不解析js不好搞,还是用spynner吧
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-5 09:34:50 | 显示全部楼层
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
0 Q2 i9 W) h- e1 D) O, L* U/ D/ {  g7 z& [. V) Y
方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量
, a; v8 Y# k$ i

点评

方案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 编辑 # ^# G2 I5 O- V! R" l, J- ^0 A
augustye 发表于 2014-8-5 09:34
& N; ~5 Q9 Y3 P$ [! Y' \: Z6 C方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
; M# ]4 I; D! \! {6 }
  r+ G! ]+ Z- \% D3 @' ?# [5 I方案2: ...

" f) c4 k5 W0 |' m4 |. h方案1.研究中。。。$ t+ [: h- y  m) y& e
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网页的相关数据的,然后数据应该已经返回到它的服务器上,我提交的时候和服务器上的数据比对,相同才可以提交成功。(我没学过js,这个是流程是我想象的,不是的话,请指出)
空
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 02:21:54 | 显示全部楼层
darren 发表于 2014-8-5 22:25
. `/ _4 a* a5 a+ |$ E% j也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 ...
1 y$ v9 a6 @( W( O1 e
ghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.py
  1. from ghost import Ghost
    # c  F4 m( a3 ]# k9 O$ I
  2. ghost = Ghost()
    4 L4 @5 e0 j3 @/ }7 q  |$ B
  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- o& o# R) s; ?- S5 n
方案1.研究中。。。
/ x# L- L' H# |0 r方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...
4 Z. u  `3 s: z- Z' A* Y
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。
6 I8 b$ k  g6 g$ `# T
# e6 ~$ y+ V; y" P# L) c; P0 ^4 k: B! f另:如果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 编辑
  B: q) B* g: ~; g* H! o1 J
augustye 发表于 2014-8-6 06:34
  d: `# |! S) H* a8 ^& |: E那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以 ...
  D* z; z3 K2 c; D4 W
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。+ o" }. `1 l( S' L4 q

. I& Z7 |! @/ _这个js不直接包含数据,我现在需要的是这个js打开之后函数生成的6位随机数。我现在还是在用你方案1的方式,找些基于webkit开发的软件。找到一些不错的模块,但是中文的网页就报错。
8 B& e& q5 Y4 @( u8 O2 M5 C2 y
: W) b9 Z% n& f) g如果愿意PM我你的QQ,我还有个技术问题求教。
空
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-6 15:18:14 | 显示全部楼层
fatiery 发表于 2014-8-6 12:12) z/ f( g2 E4 [. l& D1 S
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如t ...
" h0 {" ~, Y" j3 Y) ]
其实吧,那个js文件里生成的随机数真的就是个随机数
9 a/ O3 b# K6 I. {, i1 b! J' s. g1 S" a7 {0 e
var h="cb_"+Math.round(Math.random()*1e6);
8 L  _* Y5 Q; s! T, a
2 q. ]/ l" `# N1 ^# J( I没什么特别的。。。你完全可以用python生成。。。
- b$ x% {3 h, x: |
0 ]: f# N9 I  I. i5 M! k4 S如果还需要讨论,把你的QQ发给我,我加你
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-4 10:11 , Processed in 0.078564 second(s), 30 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

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