AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Binom
 谷歌+Bing+TT+MSN官方代理 
⚡️按条S5代理⚡️静态⚡️独享⚡️5G⚡️最干净<Wifi住宅+5G移动>IP代理泰国仓储,本土仓发货2-3元/单
7200W全球动态不重复住宅IP代理BINOM TRACKER 60% OFF!【广
户】⚡️我们很有钱这些广告位都是我买的
FB/Google/TK点我开户⚡️FB/TT/KW 加白开户ADPLEXITY + ADVERTCN
比Adplexity还好用的Spy工具MediaGo+Taboola+Ob开户百度国际MediaGo⚡️让产品狂奔全球百度国际,高点击转化,快速放量
百度国际MediaGo,独家原生流量虚拟信用卡+独立站收款行业首创新型指纹Cloak, 谷歌奇效!Kookeey⚡️100%独享⚡️原生住宅IP
全球虚拟卡, 支持U充值免账户投放 FB 广告(送项目)2024做什么 - Media buy 项目库免费黑五教程(持续更新、欢迎交流)
Facebook 批量上广告Bridgeway - 联盟营销网络各种主页、账单户、BM户(优势)⚡️个人户,bm户不限额,账单户
Adsterra 的CPA/CPM/CPC 网站流量EU KETO/CBD - Jumbleberry9Proxy ⚡️ $0.04/IP, 无限带宽 cloak斗篷/ss/nutra/cpa/Dating
FB号商直销-24小时自动发货Facebook个号0.01一个FB个号1块一个FB账号0.1一个
FB顶级服务商「Facebook广告账号/批量采购」IPCola原生住宅IP⚡️$2.1/条双ISPFB各类账号出售,售后24h在线
广告位出租全球低价纯净住宅/移动IP-免费试用VMLogin指纹浏览器+多账号防关联 
查看: 19228|回复: 16

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

[复制链接]

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

发表于 2014-8-4 23:44:47 | 显示全部楼层 |阅读模式
adsterra
用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件' J7 W' e1 U5 ~4 U% r# [- F
  1. http://static.duoshuo.com/embed.js
复制代码
里面包含了一段参数,0 H4 U2 F; M- ?- o
  1. h="cb_"+Math.round(Math.random()*1e6)
复制代码
生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。! Z& @/ g0 q* E- Y& y$ f/ p

* G4 L$ l  k6 M2 [4 K' `* {) ^请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。% R8 o# @$ r" m

4 C# i, A6 y* J' O另外最好能详细一点,不甚感激。
/ h5 ]1 L: G7 B) w0 `* H# p6 ?
相关帖子
回复

使用道具 举报

0

主题

480

广告币

1272

积分

高级会员

Rank: 4

积分
1272
发表于 2014-8-5 00:07:58 | 显示全部楼层
试试casperjs模块? 无界面浏览器 可以解析js
3 Y/ C1 {6 ~, y- B3 e官网有很详细文档1 J6 n; C" S9 H" h# j
  1. http://casperjs.org/
复制代码
6 ~# C- Q  [  g) t. v+ r: j
"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"' |, m" c5 w6 u6 o+ ?/ q
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 08:27:04 | 显示全部楼层
  1. import random
    , |# l( S/ y8 o1 G8 N6 j
  2. rand = random.randint(100000,999999)! a0 O8 {4 L; N: \7 b  b
  3. print rand! p# x! r7 Y) _
复制代码

4 g3 x  m5 b% V% U; x生成六位随机数/ H# n& M# p, ]% x( y

, I2 n% e0 n. V+ s* z1 W

点评

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

使用道具 举报

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

 楼主| 发表于 2014-8-5 08:47:35 | 显示全部楼层
阿百川 发表于 2014-8-5 08:27; W& T% W6 s# z# t" q
生成六位随机数
7 s' M3 O" y& `7 B* I
我需要获取js文件中生成的随机数,不是自己生成一个随机数
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:07:01 | 显示全部楼层
fatiery 发表于 2014-8-5 08:47* s1 _+ M) S' R1 C& E" E+ b2 k3 w
我需要获取js文件中生成的随机数,不是自己生成一个随机数

4 t" x  {8 I' t$ Q8 W7 ~8 ]这个只是随机生成的吧,又没什么验证
- |# v! E: }2 F. |: Z  @* q  \, L% }1 t& P; ]" @
  1. https://pypi.python.org/pypi/spynner
复制代码
4 Z, u/ `$ ^% ?2 S/ I& Y. |6 p
利用webkit解析js

点评

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

使用道具 举报

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

 楼主| 发表于 2014-8-5 09:18:01 | 显示全部楼层
阿百川 发表于 2014-8-5 09:07
+ ]# _$ A. K; o4 M4 P& B' C, U7 b这个只是随机生成的吧,又没什么验证
# m1 y/ ~+ j) n5 c' k3 y  e% ~7 V
有验证的,我没写,这个是用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在4 _' i$ F" `( v& u0 L
  1. http://static.duoshuo.com/embed.js
复制代码
中生成
9 {2 i% I9 t  d# x1 [
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:33:04 | 显示全部楼层
fatiery 发表于 2014-8-5 09:18$ C& a* Y& Z6 @; _6 a% i2 {
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在
. j; h6 @! W- X) O* m, p3 U7 G6 f中生成; R& s( P) I' \' u
...

& G3 x& S& p; g" a: O不解析js不好搞,还是用spynner吧
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-5 09:34:50 | 显示全部楼层
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。& u& Y( Y0 N1 [; o/ @$ t+ @

% H. M) x9 S- d% e9 F方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量, }) X- s! v2 r# D/ [

点评

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

使用道具 举报

10

主题

1191

广告币

1272

积分

高级会员

Rank: 4

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

点评

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

使用道具 举报

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

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

使用道具 举报

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

 楼主| 发表于 2014-8-6 01:06:21 | 显示全部楼层
本帖最后由 fatiery 于 2014-8-6 01:26 编辑
  v% F' |' \* G# `7 w0 _4 C
augustye 发表于 2014-8-5 09:34
6 X" v0 o, |' T+ S方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。
. b8 K% i+ e1 C( k
3 U- S$ h3 Q6 J; m方案2: ...
$ n/ j: F/ y! G+ {: w, o
方案1.研究中。。。: f+ d- X, @, J* t3 R
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网页的相关数据的,然后数据应该已经返回到它的服务器上,我提交的时候和服务器上的数据比对,相同才可以提交成功。(我没学过js,这个是流程是我想象的,不是的话,请指出)
回复 支持 反对

使用道具 举报

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

 楼主| 发表于 2014-8-6 02:21:54 | 显示全部楼层
darren 发表于 2014-8-5 22:25
  v& M, x& z5 k  K也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 ...
& }1 A6 Q  t2 l' C: m7 N* ]
ghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.py
  1. from ghost import Ghost8 q5 U2 C6 n& y! Z8 W
  2. ghost = Ghost()" e1 L% r( l6 g! G! B3 s
  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
$ X, B" F. r7 u! L$ z1 v方案1.研究中。。。" R2 N, W* @7 j7 \
方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...

. _. e2 ^, \. w% [) P那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。* H" J: X( h' Z& y) a

' d- s3 r5 ^7 U3 V5 u# s. K另:如果js文件里包含数据,那岂不是更简单,你直接抓取js文件,正则表达式匹配下就好了。

点评

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

使用道具 举报

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

 楼主| 发表于 2014-8-6 12:12:30 | 显示全部楼层
本帖最后由 fatiery 于 2014-8-6 12:15 编辑 5 m# Q" X6 r2 ]1 a! h7 ]
augustye 发表于 2014-8-6 06:34& l) T/ Z! r" t5 Q) X1 }& L
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以 ...
7 [# u7 b) k/ J
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。
8 @, Z! q3 X7 N& D5 I
& ~1 Q2 K8 X! Q/ `' C0 R" P这个js不直接包含数据,我现在需要的是这个js打开之后函数生成的6位随机数。我现在还是在用你方案1的方式,找些基于webkit开发的软件。找到一些不错的模块,但是中文的网页就报错。( v* M& R1 U3 _/ `2 I' _: h

; h8 _0 i/ K4 C8 ^$ e$ K! B如果愿意PM我你的QQ,我还有个技术问题求教。
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-6 15:18:14 | 显示全部楼层
fatiery 发表于 2014-8-6 12:12
0 X# X* F5 y: l3 V" f- P如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如t ...

& L% T; u' w& n& p5 D5 Y其实吧,那个js文件里生成的随机数真的就是个随机数
+ e  y& H6 M8 E. b/ P* T4 X8 `3 q  N  u5 e5 W1 l. U
var h="cb_"+Math.round(Math.random()*1e6);$ w+ o, |% P$ P  j

' f% ?$ \' r2 P' D! A没什么特别的。。。你完全可以用python生成。。。5 y& t4 Z" o, @
3 I: c8 o- \8 U  ~' ?/ g  B7 s1 d2 I
如果还需要讨论,把你的QQ发给我,我加你
回复 支持 反对

使用道具 举报

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

本版积分规则

Binom

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

GMT+8, 2024-6-14 02:58 , Processed in 0.054423 second(s), 21 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

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