AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Binom
 谷歌+Bing+TT+MSN官方代理 
⚡️按条S5代理⚡️静态⚡️独享⚡️5G⚡️最干净<Wifi住宅+5G移动>IP代理7200W全球动态不重复住宅IP代理
【广户】
⚡️我们很有实力Search feed套利⚡️Affiliate 广告开户FB/Google/TK点我开户⚡️
E.PN 虚拟卡BINOM TRACKER 60% OFF!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在线
批量定制不限额FB企业户广告位出租全球低价纯净住宅/移动IP-免费试用VMLogin指纹浏览器+多账号防关联
查看: 19239|回复: 16

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

[复制链接]

97

主题

1780

广告币

2298

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2298

社区QQ达人

发表于 2014-8-4 23:44:47 | 显示全部楼层 |阅读模式
adsterra
用Python写一个多(忽)说(略)的群发程序,现在遇到一个问题,打开的网页中包含一个js文件+ ^( K- X( Y4 W! ^9 ?( J
  1. http://static.duoshuo.com/embed.js
复制代码
里面包含了一段参数,1 }3 h, S: X* [7 c
  1. h="cb_"+Math.round(Math.random()*1e6)
复制代码
生成6位的随机数字,谁知道我怎么获得这个数据?python的selenium模块效率太低,我要效率高的。" C6 e- [7 u' M6 A- Y3 v1 ^) T

- Z* z4 H( N& E7 c7 u& N5 V请推荐一个模块或者是其他的什么语言, 最好是能快速上手的。
# w, B7 P8 ~4 \( k2 V6 u8 ]0 r# n5 J) i
另外最好能详细一点,不甚感激。% y3 L2 a; `9 h5 `% A* K1 a6 I
相关帖子
回复

使用道具 举报

0

主题

480

广告币

1272

积分

高级会员

Rank: 4

积分
1272
发表于 2014-8-5 00:07:58 | 显示全部楼层
试试casperjs模块? 无界面浏览器 可以解析js
1 o# B4 I* ?! }: f, ?官网有很详细文档4 Z$ b( v; A( s9 j% e
  1. http://casperjs.org/
复制代码
, y$ d3 J5 M6 @7 M  R
"CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。"
7 s0 y; }; S4 W! X) ]: n% l/ j
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 08:27:04 | 显示全部楼层
  1. import random- E& _+ Y) h/ U+ `& V
  2. rand = random.randint(100000,999999)
    " l; J- ^2 d/ r; t  c2 A% E  W
  3. print rand& o9 }( v8 p' r: i
复制代码

7 C9 G3 C2 X2 g5 w生成六位随机数
) {" @7 J, Q7 e/ w, k6 u4 V- Z
( z) M2 B4 j& O5 p5 W$ ?+ X

点评

我需要获取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/ n9 @* f( g- ]+ q3 ?# [+ N
生成六位随机数
6 ]  z' F# A4 D5 h  a# s3 N
我需要获取js文件中生成的随机数,不是自己生成一个随机数
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:07:01 | 显示全部楼层
fatiery 发表于 2014-8-5 08:47
' k3 ]( ?$ o' ~% m4 m! {7 E, A; s我需要获取js文件中生成的随机数,不是自己生成一个随机数

, ?- G: Z; c9 b0 C; i) H这个只是随机生成的吧,又没什么验证4 e2 w' c8 Q8 \$ J9 d; m7 l1 j1 h

1 \* Z9 C7 N) g; B9 f4 ?
  1. https://pypi.python.org/pypi/spynner
复制代码
2 V9 G$ f6 \/ H1 R
利用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
# w1 b! i: h3 N* U; E' u这个只是随机生成的吧,又没什么验证
$ |, @' i" N" g/ \0 [) n& g
有验证的,我没写,这个是用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在+ y7 x( q. @; V0 X' X& G
  1. http://static.duoshuo.com/embed.js
复制代码
中生成9 f+ w$ {+ M% {; B/ |/ t/ X
回复 支持 反对

使用道具 举报

54

主题

9

广告币

6010

积分

禁止访问

积分
6010
发表于 2014-8-5 09:33:04 | 显示全部楼层
fatiery 发表于 2014-8-5 09:18) q0 h* ~: c) ^" M! Y
有验证的,我没写,这个是用get方式提交的我现在就是要获取参数5,参数5在
' ^, b5 a4 c6 k3 c+ @中生成
/ v" k+ k8 o: K( g; T ...
, x2 o: P* }: Z! @/ k6 Y
不解析js不好搞,还是用spynner吧
回复 支持 反对

使用道具 举报

augustye 该用户已被删除
发表于 2014-8-5 09:34:50 | 显示全部楼层
方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。, ~4 f, w  C, S" S' D1 _9 p

- [- a5 z0 [2 x. Y方案2: 用你使用的语言重写那个js文件中的相关功能,如果你的程序是服务器端运行用nodejs可以省很多工作量! \8 ?* O& N) P* b* V0 b

点评

方案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 编辑 - U0 C, ?9 [5 h8 f, `
augustye 发表于 2014-8-5 09:34
  R( S' W- k+ C$ R' z$ Q0 t  l! e- G4 u方案1: 内嵌webkit模块运行那个网页(包括js文件),然后用webkit提供的API获取js空间中的变量值。/ M: G9 k! G% h+ U- u
) W2 J0 ]" j/ z6 V% w) [  Q
方案2: ...

" ~! L1 D3 \! v' j' X' C1 w5 L9 E方案1.研究中。。。1 w, _7 ?  J, F: x& Q
方案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
* |3 X8 c/ x2 H  {+ s也可以挂一个ghost.py, 一般做法就是跑个webkit 的内核,浏览器显示什么,你也就能得到什么 ...

6 D8 e8 I  d* x2 [0 q% Nghost.py以及上面提到的一些,还有没有提到的比如phantomjs,我都搜索到然后测试了有些代码我看不懂,有些出错比如你说的ghost.py
  1. from ghost import Ghost
    ' Z/ g6 W9 ^' H  L; }* H( F
  2. ghost = Ghost()6 a& }. `7 t" Q+ o
  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& [" L5 [  X* b/ y: h" }
方案1.研究中。。。
5 ?% K8 {6 ~3 n2 Y9 V- d  p, r" j% z方案2.重写js功能估计没用吧。必须要打开网页的时候,打开那个js,那个js应该是包含网 ...
% v- ^% V' R8 o& y
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以按理说你只需要重写相关部分,模仿下这个ajax请求就好了。
# [+ N; ?# K- ~# x4 [
! m/ _5 A4 Y8 r' |另:如果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 编辑 6 ]# q, p! _3 ~; y
augustye 发表于 2014-8-6 06:346 }1 Z# ^  \. n! I. C2 w' \
那个js里面不包含数据啊,只包含函数,浏览器运行这个js文件的时候会调用其中的函数,发出ajax请求。所以 ...
1 z2 ^# }$ U- @3 ]+ W5 {- y- r
如果我懂js,按你说的方法肯定是极好的。但是这个js文件对我而言太复杂,它里面还包含了其他的参数,比如thread_id,这个参数其实我是在另外一个页面抓取的。
6 E. o* B+ ?9 V2 n* y$ M1 g+ T- Q
这个js不直接包含数据,我现在需要的是这个js打开之后函数生成的6位随机数。我现在还是在用你方案1的方式,找些基于webkit开发的软件。找到一些不错的模块,但是中文的网页就报错。
- J2 P0 s5 o2 b9 _2 r& o
- B8 V4 o' k8 n$ }" p9 [如果愿意PM我你的QQ,我还有个技术问题求教。
回复 支持 反对

使用道具 举报

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

9 O8 J9 Y; Y5 M其实吧,那个js文件里生成的随机数真的就是个随机数8 X3 B  s9 B5 ]4 m* }! j

+ ~# v0 c+ F4 @var h="cb_"+Math.round(Math.random()*1e6);
  H! b( P$ k" C1 E' k& ]! {' _+ O
( A; _3 C+ p, v7 |' U. m! ~没什么特别的。。。你完全可以用python生成。。。
* W! Z- I2 n) `3 Y/ X$ Y6 f0 g3 D8 q4 M9 d: W' ^0 U" ^' ~
如果还需要讨论,把你的QQ发给我,我加你
回复 支持 反对

使用道具 举报

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

本版积分规则

Binom

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

GMT+8, 2024-6-14 15:26 , Processed in 0.052847 second(s), 21 queries , Gzip On, MemCache On.

Copyright © 2001-2023, AdvertCN

Proudly Operating in Hong Kong.

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