Как получить доступ к Android Play Store для всех стран?
Я делаю макрос для извлечения информации приложений Android из Google Play Store. Мой клиент требует все детали приложений для Android в мире. Я остаюсь в Индии, так как не могу получить доступ к приложениям других стран.
Пожалуйста, помогите мне получить доступ к приложениям Google Play для всей страны.
Я использую селеин для выскабливания.
2 ответа
Поиск в Интернете о вашей проблеме, я обнаружил, что вы можете получить доступ к Google Play Store других стран с помощью приложения VPN.
Посмотрев эту страницу, вы увидите основные инструкции о том, как это сделать.
Также вы можете попробовать решение в этом вопросе, просто добавив параметр gl=(countrycode)
в URL.
Например: https://play.google.com/store/apps/category/BUSINESS/collection/topselling_free
добавив gl=ru, вы получите игровой магазин для России:
https://play.google.com/store/apps/category/BUSINESS/collection/topselling_free?gl=ru
Google Play недавно изменил пользовательский интерфейс и структуру ссылок и отображения информации. Недавно я написал блог Scrape Google Play Search Apps in Python, где подробно описал весь процесс с дополнительными данными.
Чтобы получить доступ ко всемcountries
, вам нужно пройтиcountry_code
к'gl'
параметр . Вы можете найти полный список стран, поддерживаемых Google Play .
Например, я выбрал 3 страны из этого списка, чтобы показать, как работает мой скрипт:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from parsel import Selector
import time, json
countries = [
{
"country_code": "us",
"country_name": "United States"
},
{
"country_code": "uk",
"country_name": "United Kingdom"
},
{
"country_code": "ua",
"country_name": "Ukraine"
}
]
Для каждогоcountry
, генерируется отдельный запрос:
for country in countries:
params = {
'hl': 'en_GB', # language
'gl': country['country_code'], # country of the search
}
URL = f"https://play.google.com/store/apps?hl={params['hl']}&gl={params['gl']}"
service = Service(ChromeDriverManager().install())
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--lang=en")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(service=service, options=options)
driver.get(URL)
После этого идет процесс прокрутки страницы, чтобы получить все приложения:
while True:
try:
driver.execute_script("document.querySelector('.snByac').click();")
time.sleep(2)
break
except:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
The parcel
библиотека использовалась для извлечения данных:
selector = Selector(driver.page_source)
driver.quit()
data = {
'country': country['country_name'],
'apps': []
}
for app in selector.css('.UVEnyf'):
title = app.css('.Epkrse::text').get()
link = 'https://play.google.com' + app.css('.Si6A0c::attr(href)').get()
rating = app.css('.LrNMN::text').get()
rating = float(rating) if rating else rating
thumbnail = app.css('.Q8CSx::attr(srcset)').get().replace(' 2x', '')
data['apps'].append({
'title': title,
'link': link,
'rating': rating,
'thumbnail': thumbnail,
})
google_play_apps.append(data)
Код и полный пример в онлайн-IDE.
Выход:
[
{
"country": "United States",
"apps": [
{
"title": "WhatsApp Messenger",
"link": "https://play.google.com/store/apps/details?id=com.whatsapp",
"rating": 4.3,
"thumbnail": "https://play-lh.googleusercontent.com/bYtqbOcTYOlgc6gqZ2rwb8lptHuwlNE75zYJu6Bn076-hTmvd96HH-6v7S0YUAAJXoJN=s512-rw"
},
{
"title": "TikTok",
"link": "https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically",
"rating": 4.4,
"thumbnail": "https://play-lh.googleusercontent.com/OS-MhSWOPtlUZLt0_UP5TI4juSf0XhyHxGfJa6pA-UIYkZ1BB6QHTZwaMEzZDPqYsmk=s512-rw"
},
{
"title": "Gmail",
"link": "https://play.google.com/store/apps/details?id=com.google.android.gm",
"rating": 4.2,
"thumbnail": "https://play-lh.googleusercontent.com/KSuaRLiI_FlDP8cM4MzJ23ml3og5Hxb9AapaGTMZ2GgR103mvJ3AAnoOFz1yheeQBBI=s512-rw"
},
... other apps
]
},
{
"country": "United Kingdom",
"apps": [
{
"title": "WhatsApp Messenger",
"link": "https://play.google.com/store/apps/details?id=com.whatsapp",
"rating": 4.3,
"thumbnail": "https://play-lh.googleusercontent.com/bYtqbOcTYOlgc6gqZ2rwb8lptHuwlNE75zYJu6Bn076-hTmvd96HH-6v7S0YUAAJXoJN=s512-rw"
},
{
"title": "TikTok: Videos, Music & LIVE",
"link": "https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically",
"rating": 4.4,
"thumbnail": "https://play-lh.googleusercontent.com/DkTxmSymkcxHiady0xd_JsIxLLg0f1ducCtMTpO8El-kTW7VF1gCC6ZzhgTgTGwEqqI=s512-rw"
},
{
"title": "Instagram",
"link": "https://play.google.com/store/apps/details?id=com.instagram.android",
"rating": 3.7,
"thumbnail": "https://play-lh.googleusercontent.com/VRMWkE5p3CkWhJs6nv-9ZsLAs1QOg5ob1_3qg-rckwYW7yp1fMrYZqnEFpk0IoVP4LM=s512-rw"
},
... other apps
]
},
{
"country": "Ukraine",
"apps": [
{
"title": "WhatsApp Messenger",
"link": "https://play.google.com/store/apps/details?id=com.whatsapp",
"rating": 4.3,
"thumbnail": "https://play-lh.googleusercontent.com/bYtqbOcTYOlgc6gqZ2rwb8lptHuwlNE75zYJu6Bn076-hTmvd96HH-6v7S0YUAAJXoJN=s512-rw"
},
{
"title": "Telegram",
"link": "https://play.google.com/store/apps/details?id=org.telegram.messenger",
"rating": 3.9,
"thumbnail": "https://play-lh.googleusercontent.com/ZU9cSsyIJZo6Oy7HTHiEPwZg0m2Crep-d5ZrfajqtsH-qgUXSqKpNA2FpPDTn-7qA5Q=s512-rw"
},
{
"title": "Instagram",
"link": "https://play.google.com/store/apps/details?id=com.instagram.android",
"rating": 4.0,
"thumbnail": "https://play-lh.googleusercontent.com/VRMWkE5p3CkWhJs6nv-9ZsLAs1QOg5ob1_3qg-rckwYW7yp1fMrYZqnEFpk0IoVP4LM=s512-rw"
},
... other apps
]
}
]
Кроме того, вы можете использовать API магазина приложений Google Play от SerpApi. Он будет обходить блокировки со стороны поисковых систем, и вам не придется создавать парсер с нуля и поддерживать его.
Пример кода:
from serpapi import GoogleSearch
from urllib.parse import urlsplit, parse_qsl
import os, json
countries = [
{
"country_code": "us",
"country_name": "United States"
},
{
"country_code": "uk",
"country_name": "United Kingdom"
},
{
"country_code": "ua",
"country_name": "Ukraine"
}
]
google_play_apps = []
for country in countries:
params = {
# https://docs.python.org/3/library/os.html#os.getenv
'api_key': os.getenv('API_KEY'), # your serpapi api
'engine': 'google_play', # SerpApi search engine
'store': 'apps', # Google Play Apps
'hl': 'en', # language
'gl': country['country_code'], # country of the search
}
search = GoogleSearch(params) # where data extraction happens on the SerpApi backend
data = {
'country': country['country_name'],
'apps': []
}
while True:
result_dict = search.get_dict() # JSON -> Python dict
if result_dict.get('organic_results') is None: break
for result in result_dict.get('organic_results'):
for item in result['items']:
data['apps'].append(item)
google_play_apps.append(data)
if 'next' in result_dict.get('serpapi_pagination', {}):
search.params_dict.update(dict(parse_qsl(urlsplit(result_dict.get('serpapi_pagination').get('next')).query)))
else:
break
print(json.dumps(google_play_apps, indent=2, ensure_ascii=False))
Выход будет таким же.