AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

Rank: 7Rank: 7Rank: 7

积分
2608

社区QQ达人

发表于 2014-8-4 23:44:47 | 显示全部楼层 |阅读模式
用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件0 m; B0 A% G, p5 X8 B0 z
  1. http://static.duoshuo.com/embed.js
复制代码
里面包含了一段参数,! S# k8 K: I9 x# }
  1. h="cb_"+Math.round(Math.random()*1e6)
复制代码
生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。% a$ }, U; W: m

( z4 V& d% ~- @9 ~, [- g, e请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。6 z; y% U+ J, X1 C
3 \! @6 e) v% K5 C0 T' n4 `
另外最好能详细一点,不甚感激。
" E* P4 B) D% p
相关帖子
回复

使用道具 举报

0

主题

488

广告币

1280

积分

高级会员

Rank: 4

积分
1280
发表于 2014-8-5 00:07:58 | 显示全部楼层
试试casperjs模块? 无界面浏览器 可以解析js + K: ~: q% t/ ~  Y( I4 e
官网有很详细文档8 q6 P: q; e! R: _1 v$ ~
  1. http://casperjs.org/
复制代码

4 c" l5 c6 I, D4 w* K2 [, E"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"
# R; u: U: k/ D; K6 Y
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 08:27:04 | 显示全部楼层
  1. import random, g, v! i: K, l/ P. @
  2. rand = random.randint(100000,999999)- H2 E. G6 s8 {
  3. print rand; M1 G: t: T# Y& o
复制代码

& d1 Z8 c" y& v& C  y. d8 `生成六位随机数
5 Y, U2 }; D% l: T% S0 p, x4 d' h0 _& Y6 P* ~# f* W0 W

点评

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

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

Rank: 7Rank: 7Rank: 7

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-5 08:47:35 | 显示全部楼层
阿百川 发表于 2014-8-5 08:272 d) l! P$ x8 z# n0 B# }
生成六位随机数

1 }/ i, i$ h. b7 Y- ~我需要获取js文件中生成的随机数,不是自己生成一个随机数
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:07:01 | 显示全部楼层
fatiery 发表于 2014-8-5 08:477 C% |4 H! z0 P8 a0 o, y
我需要获取js文件中生成的随机数,不是自己生成一个随机数
8 V# J2 k( l+ Y! g" }/ N
这个只是随机生成的吧,又没什么验证; L. e9 c! v9 S# D* h8 z

3 m* s/ q; j5 R
  1. https://pypi.python.org/pypi/spynner
复制代码

& [( S) e$ T$ T# N. w+ F0 [利用webkit解析js

点评

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

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

Rank: 7Rank: 7Rank: 7

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-5 09:18:01 | 显示全部楼层
阿百川 发表于 2014-8-5 09:07
7 f3 p- f( n8 }( s' S这个只是随机生成的吧,又没什么验证

9 W+ K2 t8 o6 s8 Q$ E* b1 [有验证的,我没写,这个是用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在& l2 y6 O! r+ P0 P/ ^7 i. F6 I
  1. http://static.duoshuo.com/embed.js
复制代码
中生成
* s  g+ M8 e) a) k3 ^
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:33:04 | 显示全部楼层
fatiery 发表于 2014-8-5 09:18+ ^7 o! }( M( X% s; ~
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在3 E5 B) H& K0 d. ^2 h, Y4 p' U
中生成! @: C$ Q/ S! }/ ]
...
; [0 `$ d, v  ]& v
不解析js不好搞,还是用spynner吧
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-5 09:34:50 | 显示全部楼层
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
. C9 I$ ?4 a3 y/ Q- k- Z2 e1 m0 ]" h
方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量
! B1 D2 r2 o  Z6 v. S% _

点评

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

使用道具 举报

10

主题

1314

广告币

1376

积分

高级会员

Rank: 4

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

点评

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

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

Rank: 7Rank: 7Rank: 7

积分
2608

社区QQ达人

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

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

Rank: 7Rank: 7Rank: 7

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 01:06:21 | 显示全部楼层
本帖最后由 fatiery 于 2014-8-6 01:26 编辑 3 v, E' b5 _1 ~( d0 M. I' L
augustye 发表于 2014-8-5 09:34
) n' u* ]+ [! ]7 E" Q# N2 h/ r1 `( l方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
/ K3 i: z& D1 T  s
! q' X4 ~$ Z5 i. r- N6 p+ h+ e方案2: ...
6 r5 I0 B' ]' ^+ x: |
方案1.研究中。。。
/ \4 D  h# A/ r; H方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网页的相关数据的,然后数据应该已经返回到它的服务器上,我提交的时候和服务器上的数据比对,相同才可以提交成功。(我没学过js,这个是流程是我想象的,不是的话,请指出)
回复 支持 反对

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

Rank: 7Rank: 7Rank: 7

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 02:21:54 | 显示全部楼层
darren 发表于 2014-8-5 22:25) w8 s  Z# Y; p" L; s& k* }- X; _
也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 ...
2 n8 K% ^# J  u9 g' K- h3 s
ghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.py
  1. from ghost import Ghost2 U5 ^7 D" c8 @; T# r1 Q% }
  2. ghost = Ghost()
    ; L6 z1 T% s  D' d
  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& c+ r* }6 n. i8 A, j% w, X
方案1.研究中。。。5 u5 d7 @( y' h. T4 v* p
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...

7 P0 Q# z( w0 d0 @& Y. i' z1 e那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。5 n2 o0 m! }( j. n
; D: n9 w9 [& _) ?3 _2 _
另:如果js文件里包含数据,那岂不是更简单,你直接抓取js文件,正则表达式匹配下就好了。

点评

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

使用道具 举报

119

主题

2037

广告币

2608

积分

版主

名利权情牢是非成败空

Rank: 7Rank: 7Rank: 7

积分
2608

社区QQ达人

 楼主| 发表于 2014-8-6 12:12:30 | 显示全部楼层
本帖最后由 fatiery 于 2014-8-6 12:15 编辑 4 C& w8 ^$ g1 E
augustye 发表于 2014-8-6 06:34$ R! C7 g" t9 M5 }
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以 ...
* G* k# s8 C" v
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。$ C4 N  b4 R/ G$ `' G

3 ~1 F: B% ~' U& [7 W这个js不直接包含数据,我现在需要的是这个js打开之后函数生成的6位随机数。我现在还是在用你方案1的方式,找些基于webkit开发的软件。找到一些不错的模块,但是中文的网页就报错。
& u9 @/ Q* n3 d/ y. W( t6 j# [; A% d7 t& l2 v2 R
如果愿意PM我你的QQ,我还有个技术问题求教。
回复 支持 反对

使用道具 举报

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

0 R% h2 H0 ^4 R' q4 u其实吧,那个js文件里生成的随机数真的就是个随机数) i5 Y$ n! e0 N5 [  `! w+ U
( R0 r( j: c9 V7 J9 x$ N, U2 k3 R
var h="cb_"+Math.round(Math.random()*1e6);
: z) J7 `. B- g2 a! `. \8 a  ?" r5 j# V3 Y
没什么特别的。。。你完全可以用python生成。。。
( v8 b# k' N1 ?6 E1 |1 r$ \7 Y' b5 G7 V9 Z' v* J+ R
如果还需要讨论,把你的QQ发给我,我加你
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-22 09:51 , Processed in 0.057498 second(s), 21 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

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