抓取Google Play商店

时间:2014-12-16 07:47:45

标签: google-apps-marketplace

我正在抓取Google应用商店。我使用Firefox + firebug来查看请求和响应。但是我不明白一个参数。 例如:URL"" 当加载下一页时,它发布一个param pagTok,其值是" EgIIKA ==:S:ANO1ljJ4wWQ" 我不知道这个价值来自哪里?任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:10)

<强>研究

由于Google最近更改了他们的分页逻辑,现在它需要一个令牌,我发现自己试图调查如何手动生成这些令牌,或者将其从每个响应中检索到的HTML中删除。所以,让我们弄清楚。

使用Fiddler2,我能够隔离一些令牌样本,查看为每个&#34; Paging&#34;发出的请求。 Play商店。

以下是整个请求:

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

现在我们知道了请求的内容,下一步是跟踪更多请求以尝试隔离某些令牌形成逻辑。

以下是我能找到的3个请求令牌:

&#34; GAEiAggU%3AS%3AANO1ljLtUJw&#34;,&#34; GAEiAggo%3AS%3AANO1ljIeRQQ&#34;,&#34; GAEiAgg8%3AS%3AANO1ljIM1CI&#34;

寻找模式

我们的大脑真正擅长的一件事就是找到模式,这是我发现的关于代币形成的内容:

1 - 从以下开始:&#34; GAEiA&#34;

2 - 后跟:两个随机字符

3 - 后跟:&#34;%3AS%3&#34;

4 - 后跟:11个随机字符

浏览器Javascript欺骗x手动HTTP请求

在大多数情况下,在浏览器上执行相同的请求不会产生与使用代码相同的结果,手动发出Http请求。为什么?因为Javascript。

Google是一个沉重的JS用户,因此它会利用它自己的技巧来欺骗你。

如果您查看HTML,您将看不到与上述模式匹配的令牌,相反,您会发现如下内容:

u0026c\\u003dapps\42,\42GAEiAghQ:S:ANO1ljLxWBY\42,\0420\42,\0420\42,\0420\42]\n

如果你仔细观察,你会看到你的令牌在这个&#34;随机字符串&#34;中。你所要做的就是更换:&#34;:S:&#34;按&#34;%3AS%&#34;

胜利的正则表达

如果您将正则表达式应用于页面,您将能够找到令牌,然后手动将%SAS字符串替换为%SAS%。

这是我最终使用的那个(由最好的Regex online Builder

提供支持

生成正则表达式:

/ GAEi + +:S:{11} \ 42 /

正则表达式的文本含义:

  • 匹配包含字符串GAE
  • 的字符串
  • 后跟字符i 1次或更多次
  • 后跟任何字符1次或更多次
  • 后跟字符串:S:
  • 后面跟任何字符完全11次
  • 后跟字符串\ 42

<强> TL:DR

令牌进入HTML,但它被掩盖了#34;谷歌,#34; unmasks&#34;它使用Javascript(只有在使用Selenium等浏览器引擎时才能运行)。

为了获取下一页的pagToken,请阅读当前页面html,抓取它(上面的逻辑),在下一个请求中使用它,重复。

我希望它有所帮助,对于文本墙感到抱歉,我希望尽可能清楚

相关问题