Skip to content

Instantly share code, notes, and snippets.

@PaulSec
Created November 18, 2018 12:45
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PaulSec/5c97bbaf3b4eafcc12ea719cecb8539b to your computer and use it in GitHub Desktop.
Save PaulSec/5c97bbaf3b4eafcc12ea719cecb8539b to your computer and use it in GitHub Desktop.
APKPure.com search utility
#!/usr/bin/env python
# python search.py -s uber
# https://apkpure.com/search?q=uber
# Name: Uber, (package: com.ubercab), Download: https://apkpure.com/uber/com.ubercab
# Name: Uber Driver, (package: com.ubercab.driver), Download: https://apkpure.com/uber-driver/com.ubercab.driver
# Name: Lyft, (package: me.lyft.android), Download: https://apkpure.com/lyft/me.lyft.android
# Name: Uber Eats: Local Food Delivery, (package: com.ubercab.eats), Download: https://apkpure.com/uber-eats-local-food-delivery/com.ubercab.eats
# Name: Uber Fleet, (package: com.ubercab.fleet), Download: https://apkpure.com/uber-fleet/com.ubercab.fleet
# Name: Free Uber Coupon Code, (package: taxiuber.coupon.code), Download: https://apkpure.com/free-uber-coupon-code/taxiuber.coupon.code
# Name: Offline Ride for Uber, (package: me.nicapp), Download: https://apkpure.com/offline-ride-for-uber/me.nicapp
# Name: Surge for UBER, (package: dynamikapp.com), Download: https://apkpure.com/surge-for-uber/dynamikapp.com
# Name: Free Taxi Uber Promo Code, (package: taxian.uberpromo.code), Download: https://apkpure.com/free-taxi-uber-promo-code/taxian.uberpromo.code
# Name: FareWell for Uber and Lyft, (package: com.newlooktechnologies.farewell), Download: https://apkpure.com/farewell-for-uber-and-lyft/com.newlooktechnologies.farewell
# Name: Taxi Driver UBER Guide, (package: com.guaide.user.uberuserguaide), Download: https://apkpure.com/taxi-driver-uber-guide/com.guaide.user.uberuserguaide
# Name: Free Taxi Coupons for Uber, (package: com.spacextechappz.taxiuberbcoupons), Download: https://apkpure.com/free-taxi-coupons-for-uber/com.spacextechappz.taxiuberbcoupons
# python search.py -p com.ubercab.driver
# [0] Name: Uber Driver (com.ubercab.driver)
# [1] Name: Lyft Driver (com.lyft.android.driver)
# [2] Name: Ubertaxi Iceland Driver (com.UbertaxiIceland.driver)
# [3] Name: TaxiCaller Driver (com.taxicaller.dispatch)
# [...]
# [11] Name: Food Delivery Driver App (com.cubefooddeliver.driver)
# [12] Name: Driver Simulator (com.zuuks.driver.simulator)
# [13] Name: carGO Driver (com.cargo.sp)
# [14] Name: Driver Earnings for Uber (com.yuddi.driverearnings)
# Select which application you want to search for: [Eg. 0] : 0
# Version V4.201.10002, Size: 56.7 MB, Developer: Uber Driver, Update date: 2018-11-16, Download: https://apkpure.com/uber-driver/com.ubercab.driver/download/1626-APK
# Version V4.200.10002, Size: 56.6 MB, Developer: Uber Driver, Update date: 2018-11-07, Download: https://apkpure.com/uber-driver/com.ubercab.driver/download/1610-APK
# Version V3.182.10001, Size: 65.0 MB, Developer: Uber Driver, Update date: 2018-10-25, Download: https://apkpure.com/uber-driver/com.ubercab.driver/download/1304-APK
# [...]
from bs4 import BeautifulSoup
import requests
import optparse
import sys
def keyword_search(keyword):
url = 'https://apkpure.com/search?q={}'.format(keyword)
req = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')
candidates = soup.findAll('dl', attrs={'class': 'search-dl'})
res = []
for idx, candidate in enumerate(candidates):
tmp_name = candidate.find('a')
name = tmp_name['title'].replace(' APK', '')
package = tmp_name['href'].split('/')[-1]
tmp_res = {'name': name, 'package': package, 'download_link': tmp_name['href']}
res.append(tmp_res)
return res
def get_versions(keyword):
res = keyword_search(keyword)
for idx, app in enumerate(res):
print("[{}] Name: {} ({})".format(idx, app['name'], app['package']))
idx = int(input('Select which application you want to search for: [Eg. 0] : '))
url = 'https://apkpure.com{}/versions'.format(res[idx]['download_link'])
req = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')
try:
container = soup.find('ul', attrs={'class': 'ver-wrap'})
app_versions = container.findAll('li')
for app in app_versions:
tmp_download = app.find('a', attrs={'class': 'down'})['href'].split('?')[0]
download_link = "https://apkpure.com{}".format(tmp_download)
version = app.find('span', attrs={'class': 'ver-item-n'}).text
size = app.find('span', attrs={'class': 'ver-item-s'}).text
developer = app.find('p').text
update_date = app.find('p', attrs={'class': 'update-on'}).text
print("Version {}, Size: {}, Developer: {}, Update date: {}, Download: {}".format(version, size, developer, update_date, download_link))
except:
print("There might not be several versions for this APK, check https://apkpure.com{}".format(res[idx]['download_link']))
parser = optparse.OptionParser()
parser.add_option('-s','--search', action="store", help="Search for a specific term", dest="search", default=None)
parser.add_option('-p','--package', action="store", help="Search for a specific package", dest="package", default=None)
options, args = parser.parse_args()
if options.search is None and options.package is None:
print("You need specify either a package or a search term")
parser.print_help()
sys.exit(-1)
if options.search:
res = keyword_search(options.search)
for app in res:
print("Name: {}, (package: {}), Download: {}".format(app['name'], app['package'], "https://apkpure.com" + app['download_link']))
if options.package:
get_versions(options.package)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment