批量下载应用宝上的apk文件 - Python
本文内容来源于网络,仅供学习和交流使用,不具有任何商业用途,如有侵权或者其他问题,请即时与我联系,我会第一时间处理。---Python逐梦者。
如题:
1 """ 2 下载应用宝上所有的apk文件 3 """ 4 import os 5 import random 6 7 from selenium import webdriver 8 import requests 9 import parsel 10 11 filePath = 'apkFiles\\' 12 13 if not os.path.exists(filePath): 14 os.mkdir(filePath) 15 16 # 请求头 17 headers = { 18 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 19 } 20 url = 'https://sj.qxxq.com/myapp/category.htm?orgame=1' # 通过分析我们发现它是懒加载,调用selenium 21 22 # 开始请求数据 23 response = requests.get(url=url, headers=headers) 24 # print(response.text) 25 # 选择器 26 selector = parsel.Selector(response.text) 27 # 开始选取应用列表 28 lis = selector.css('.main ul li') 29 print(len(lis)) # 只有前40个 30 # 开始读取名称和下载链接 31 for li in lis: 32 name = li.css('.app-info-desc a::text').get() 33 downLoadTime = li.css('.app-info-desc .download::text').get() 34 size = li.css('.app-info-desc .size::text').get() 35 downLoadUrl = li.css('.app-info-desc .com-install-btn::attr(ex_url)').get() 36 print(name, downLoadTime, size, downLoadUrl, sep='|') 37 38 # 开始下载 39 res = requests.get(url=downLoadUrl, headers=headers) 40 time.sleep(random.randint(2, 10)) 41 with open(filePath + name + '.apk', mode='wb') as f: 42 f.write(res.content) 43 print(name + '-----下载完毕!')
我没有下载完,部分截图如下:
页面是懒加载,尝试用selenium加载全部页面:
1 """ 2 下载应用宝上所有的apk文件 3 """ 4 import os 5 import random 6 import time 7 from selenium import webdriver 8 import requests 9 10 11 # 文件夹 12 filePath = 'apkFiles\\' 13 if not os.path.exists(filePath): 14 os.mkdir(filePath) 15 16 headers = { 17 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 18 } 19 # 定义页面下滑函数 20 def dropDown(): 21 for i in range(1, 10): 22 j = i / 9 23 js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f - 500' % j # 页面高度等于 24 time.sleep(random.randint(2, 5)) # 随机休眠 25 driver.execute_script(js) 26 27 # 初始化浏览器 28 driver = webdriver.Chrome() 29 url = 'https://sj.qq.com/myapp/category.htm?orgame=1' 30 driver.get(url) # 请求页面 31 driver.implicitly_wait(10) # 全局等待10秒 32 driver.maximize_window() # 最大化窗口 33 dropDown() # 下滑 34 35 # 获取列表 36 lis = driver.find_elements_by_css_selector('.main ul li') 37 print(lis, len(lis)) 38 # 开始循环列表 39 for li in lis: 40 # name = li.find_element_by_css_selector('.app-info-desc a').text # 名称 41 name = li.find_element_by_css_selector('.app-info-desc .com-install-btn').get_attribute('appname') # 名称 42 size = li.find_element_by_css_selector('.app-info-desc .size').text # 大小 43 downLoadTime = li.find_element_by_css_selector('.app-info-desc .download').text # 下载次数 44 downLoadUrl = li.find_element_by_css_selector('.app-info-desc .com-install-btn').get_attribute('ex_url') # 下载链接 45 print(name, size, downLoadTime, downLoadUrl, sep='|') 46 47 # 接下来用requests请求下载 48 response = requests.get(url=downLoadUrl, headers=headers) 49 time.sleep(random.randint(2, 5)) 50 with open(filePath + name + '.apk', mode='wb') as f: 51 f.write(response.content) 52 print(name + '==================下载完成======================')
逐梦很累,坚持加油。