Google Play最近改变了用户界面和链接的结构以及信息的显示,我最近写了一个Scrape Google Play Search Apps in Python博客,在那里我用更多的数据详细描述了整个过程。 要访问所有的countries,需要将country_code传递给'gl'参数。 例如,我从列表中选择了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)
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))
2条答案
按热度按时间46qrfjad1#
通过在互联网上搜索您的问题,我发现你可以访问其他国家的Google Play商店与VPN应用程序.
通过检查此page,您将看到如何执行此操作的基本说明。
您也可以在SO question中尝试该解决方案,只需在URL中添加参数
gl=(countrycode)
即可。例如:
https://play.google.com/store/apps/category/BUSINESS/collection/topselling_free
个通过添加gl=ru,可以得到俄罗斯的play存储:
falq053o2#
Google Play最近改变了用户界面和链接的结构以及信息的显示,我最近写了一个Scrape Google Play Search Apps in Python博客,在那里我用更多的数据详细描述了整个过程。
要访问所有的
countries
,需要将country_code
传递给'gl'
参数。例如,我从列表中选择了3个国家/地区来展示我的脚本如何工作:
对于每个
country
,生成单独的请求:之后,还有一个滚动页面获取所有应用的过程:
使用
parcel
library提取数据:在线IDE中的代码和完整示例。
输出量:
另外,你可以使用SerpApi的Google Play Apps Store API,它会绕过搜索引擎的阻塞,你不必从头开始创建解析器并维护它。
程式码范例:
输出将是相同的。