2014-12-16 3 views
4

Я сканирую магазин приложений Google. Я использую Firefox + firebug для просмотра запроса и ответа. но один параметр я не понимаю. например: URL-адрес « при загрузке следующей страницы, он отправляет параметр pagTok, значение которого« EgIIKA ==: S: ANO1ljJ4wWQ » Я не знаю, откуда это значение? любой может помочь?Сканирование Google Play магазина

+0

Вы говорите о маркере страницы, которая генерируется в ответ? Лексема страницу помогает получить конкретную страницу результат. – SGC

+0

Сообщите мне, если бы вы смогли это решить. Я все еще пытаюсь понять это, так как это в значительной степени нарушило мой код искателя: github.com/MarcelloLins/GooglePlayAppsCrawler –

ответ

10

Исследование

Поскольку Google недавно изменил свой пейджинг логик, и теперь он требует маркера, я нашел себя, пытаясь выяснить, как либо вручную генерировать эти маркера, или скрести их из HTML извлекается при каждом ответе. Итак, давайте соберём руки.

Используя Fiddler2, я смог выделить некоторые образцы токенов, глядя на запросы, выданные для каждого «пейджинга» в 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 запроса токенов я мог бы найти:

"GAEiAggU% 3AS% 3AANO1ljLtUJw", "GAEiAggo% 3AS% 3AANO1ljIeRQQ", "GAEiAgg8% 3AS% 3AANO1ljIM1CI"

Нахождение Patterns

Одно наш мозг действительно хорош в том, чтобы найти образцы, вот что мое нашел о формировании лексем:

1 - начинается с: «GAEiA»

2 - Далее следуют: два случайных символов

3 - Далее следуют: "% 3AS% 3"

4 - Далее следуют: 11 случайных символов

Браузер уловок Javascript х Руководство пользователя HTTP-запросов

Выполнение одного и того же запроса в браузере в большинстве случаев не приведет к тем же результатам, что и при использовании кода, вручную выдав запрос Http. Зачем ? Из-за Javascript.

Google - это тяжелый пользователь JS, поэтому он будет использовать свои собственные трюки, чтобы попытаться обмануть вас.

Если вы посмотрите на HTML, вы не увидите никакого маркера, который соответствует шаблону, описанному выше, вместо этого, вы найдете что-то вроде:

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

Если вы посмотрите внимательно, вы увидите, что ваш токен находится внутри этой «случайной строки». Все, что вам нужно сделать, это заменить: «: S:» на «% 3AS%».

Регулярные выражения Для Win

Если применить регулярные выражения на страницу, вы сможете найти маркер, и чем вручную заменить: S: строку с% 3AS% один.

Вот один я закончил с использованием (питание от лучших Regex online Builder

сгенерированного регулярное выражение:

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

Текстовое значение регулярного выражения:

  • Соответствует строке, содержащей Строка GAE
  • с последующим символом I 1 или более раз
  • с последующим любым символом 1 или более раз
  • следуют строки: S:
  • с последующим любым символом ровно в 11 раз
  • с последующим строка \ 42

TL: DR

токен приходит в го e HTML, но он «замаскирован» Google, что «размазывает» его с помощью Javascript (который можно запускать только в том случае, если вы используете браузерные движки, такие как Selenium или что-то еще).

Чтобы получить страницу pagToken следующей страницы, прочитайте текущую страницу html, очистите ее (логика выше), используйте ее на следующем запросе, повторите.

Я надеюсь, что это помогает, извините о стене текста, я хотел быть как можно более ясно

+2

Ваше объяснение мне очень помогло, спасибо! Я бы предложил дополнительный момент для интеграции. Некоторые случайные строки содержат «** \ u003d **», которые должны быть преобразованы в «** = **». – hata

+0

Похоже, что «: S:» следует заменить на «% 3AS% 3A», а не «% 3AS%». «:» Кодируется как «% 3A». Кроме того, регулярное выражение должно быть /GAEi+.+:S:.{11}\\42/ с дополнительной обратной косой чертой до 42. – MattClimbs

+0

Шляпы на ваше исследование, нашли ли вы какое-нибудь твердое решение? – sumitarora

Смежные вопросы