wol*_*god 4 google-apps-marketplace
我正在抓取Google应用商店.我使用Firefox + firebug来查看请求和响应.但一个参数我不明白.例如:加载下一页时的URL"",它发布一个param pagTok,其值为"EgIIKA ==:S:ANO1ljJ4wWQ"我不知道这个值来自哪里?任何人都可以帮忙吗?
Mar*_*ins 11
调查
由于谷歌最近更改了他们的分页逻辑,现在它需要一个令牌,我发现自己试图研究如何手动生成这些令牌,或者将其从每个响应中检索到的HTML中删除.所以,让我们弄脏手.
使用Fiddler2,我能够隔离一些令牌样本,查看为Play商店的每个"Paging"发出的请求.
这是整个请求:
POST https://play.google.com/store/search?q=a&c=apps HTTP/1.1
Host: play.google.com
Connection: keep-alive
Content-Length: 123
Origin: https://play.google.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Accept: */*
X-Client-Data: CIe2yQEIpLbJAQiptskBCMG2yQEInobKAQjuiMoBCImSygE=
Referer: https://play.google.com/store/search?q=a&c=apps
Accept-Encoding: gzip, deflate
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2
** Post Body **
start=0&num=0&numChildren=0&pagTok=GAEiAggU%3AS%3AANO1ljLtUJw&ipf=1&xhr=1&token=bH2MlNeViIRJA8dT-zhaKrfNH7Q%3A1420660393029
Run Code Online (Sandbox Code Playgroud)
现在我们知道请求是什么,下一步是跟踪更多请求以尝试隔离一些令牌形成逻辑.
这是我能找到的3个请求令牌:
"GAEiAggU%3AS%3AANO1ljLtUJw","GAEiAggo%3AS%3AANO1ljIeRQQ","GAEiAgg8%3AS%3AANO1ljIM1CI"
寻找模式
我们大脑真正擅长的一件事就是找到模式,这是我发现的关于令牌形成的东西:
1 - 开头:"GAEiA"
2 - 后跟:两个随机字符
3 - 后续:"%3AS%3"
4 - 后跟:11个随机字符
浏览器Javascript欺骗x手动HTTP请求
在大多数情况下,在浏览器上执行相同的请求将不会产生与使用代码,手动发出Http请求相同的结果.为什么?因为Javascript.
谷歌是一个沉重的JS用户,所以它会利用它自己的技巧来欺骗你.
如果您查看HTML,您将看不到与上述模式匹配的令牌,相反,您会发现以下内容:
u0026c\\u003dapps\42,\42GAEiAghQ:S:ANO1ljLxWBY\42,\0420\42,\0420\42,\0420\42]\n
如果你仔细观察,你会发现你的令牌在这个"随机字符串"中.您所要做的就是将":S:"替换为"%3AS%".
胜利的正则表达式
如果将正则表达式应用于页面,您将能够找到令牌,然后手动将%SAS字符串替换为%SAS%.
这是我最终使用的那个(由最好的Regex在线Builder提供支持
生成的正则表达式:
/GAEi+.+:S:.{11}\42/
正则表达式的文本含义:
TL:DR
令牌进入HTML,但它被Google"屏蔽",使用Javascript"取消屏蔽"它(只有在使用Selenium等浏览器引擎时才可以运行).
为了获取下一页的pagToken,请阅读当前页面html,抓取它(上面的逻辑),在下一个请求中使用它,重复.
我希望它有所帮助,对于文本墙感到抱歉,我希望尽可能清楚
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |