Python爬取当贝市场APK应用信息并下载

python爬虫实战之爬取安卓apk         当前市面上有大量的应用市场,这些应用市场作为各个安卓开发者的分发渠道,占据着重要的位置。如果我们需要批量下载apk用于研究,那么就需要用到爬虫技术,这里仅仅介绍一个简单的例子,即爬取应用宝上的apk。    ... 阅读详情

年初自学python一段时间,项目中很少遇到需要实践python的地方,最近公司机顶盒的应用市场需要进行应用挂网,测试同事需要从当贝市场和奇珀市场下载特定的200多个应用,并提取信息挂到自己的服务器上,作为客户端开发的我,能用程序实现的绝对不会使用重复劳动力。

安装python 3.7,针对爬虫程序依赖的module,以管理员身份启动cmd
所需模块:beautifulsoup4 处理网页解析
requests 处理网页请求
re 处理正则表达式
lxml 是python的一个解析库,支持HTML和XML的解析
lxml需要自己下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/
使用pip install <模块>即可。

如下图,需要抓取应用名称,版本,简介和图片并下载。
在这里插入图片描述
chrome F12后可以看到相应标签的class等属性,右键-copy-copy selector就可以复制css选择器标签元素。
关键代码如下:

def downloadApp(AppName):
    url = 'http://www.dangbei.com/app/plus/search.php?kwtype=0&q=' + AppName

    # 获取网页源码
    web_data = requests.get(url, headers=headers)
    # print('content:' + web_data.text)
    # 解析网页
    soup = BeautifulSoup(web_data.text, 'lxml')

    try:
        # 获取第一个搜索内容的名字
        firstRecordName = soup.select('#softList > li:nth-of-type(1) > div > div.softInfo > p.title > a')[
            0].get_text().strip()

        if AppName in firstRecordName:
            # 正则表达式找出抬头与红色关键词之间的跳转链接文本
            # 正则表达式的运用可以参考这篇博客: https://www.cnblogs.com/chuxiuhong/p/5885073.html
            pattern0 = re.compile(r'<a href=".+' + "<font color='red'>")
            linkUrls = pattern0.findall(web_data.text)
            # print(linkUrls[0])
            # 获取二级页面链接  http://www.dangbei.com/app/tv/2015/0723/2687.html变为https://m.dangbei.com/wap-view-2687.html
            tempStr = linkUrls[0].split()[1].split('"')[1]
            tempList = re.findall(r'\d+', tempStr)
            linkUrl = 'https://m.dangbei.com/wap-view-' + tempList[2] + ".html"
            print("'" + firstRecordName + "'" + "的应用页面:" + linkUrl)

            # 进入二级页面,以获取应用详情
            web_data = requests.get(linkUrl, headers=headers)
            soup = BeautifulSoup(web_data.text, 'lxml')
            try:
                version = soup.select('div.app-cat > span:nth-of-type(4)')[0].get_text().strip()
                version = version.split(':')[1]
                print("'" + firstRecordName + "'" + "的版本号:\n" + version)
                filename = AppName + '_' + version
                appdir = os.path.join(PATH, filename)
                isExists = os.path.exists(appdir)
                if not isExists:
                    # 创建文件夹
                    print('新建了一个', filename, '的文件夹!')
                    os.makedirs(appdir)
                    # 切换工作路径到AppName下
                    os.chdir(appdir)
                else:
                    print(filename, '文件夹已经存在了!')
                    # if shutil.rmtree(appdir, True):
                    # os.rmdir(appdir)  # 只能删除空目录,否则报错
                    os.chdir(appdir)
                    return
                introduction = soup.select('div.info-content > div > p')[0].get_text()
                print("'" + firstRecordName + "'" + "的详情介绍:\n" + introduction)
                # 'w'或者'wb'表示写文本文件或写二进制文件
                with open(filename + '.txt', 'w', encoding='utf-8') as f:
                    f.write(introduction)
                photourl = soup.select('div.scroll_box > ul > li')
                print("'" + firstRecordName + "'" + "的图片地址:")
                count = 1
                for temp in photourl:
                    temp_url = temp.find('img')['src']
                    temp_url = 'http://' + temp_url.split('//')[1]
                    large_url = temp_url.split('!')[0]
                    print(large_url)
                    urllib.request.urlretrieve(large_url,  'large_%s.jpg' % count)
                    urllib.request.urlretrieve(temp_url, 'small_%s.jpg' % count)
                    count += 1
                apk = soup.select('div.info_downxload > a.btn_download_app')[0]
                apkurl = apk.attrs['href']
                apktitle = apk.attrs['title']
                print("'" + firstRecordName + "'" + "的下载链接:\n" + apkurl)
                urllib.request.urlretrieve(apkurl, apktitle + '_' + version + '.apk')
            except:
                print('search error')
                os.chdir(PATH)
                with open('record.txt', 'a+', encoding='utf-8') as f:
                    f.write(AppName + '\n')
        else:
            print("未找到与'" + AppName + "'相关的内容")
            os.chdir(PATH)
            with open('record.txt', 'a+', encoding='utf-8') as f:
                f.write(AppName + '\n')

    except:
        print("未找到与'" + AppName + "'相关的内容")
        os.chdir(PATH)
        with open('record.txt', 'a+', encoding='utf-8') as f:
            f.write(AppName + '\n')

抓取结果如图:
在这里插入图片描述
在这里插入图片描述

大致使用:applist.txt输入需要抓取的应用名称,若有搜索结果便新建一个应用文件夹,里面存放图片和apk等信息,由于抓取的信息需要存放在对应目录,采用线程池并行下载会存在文件存放错乱的问题,所以采用串行下载。
期间遇到的问题:

  1. 复制的selector的若包含nth-child,得到的结果是空,使用nth-of-type即可。两者区别: nth-of-type(n) 匹配属于父元素的特定类型的第 N 个子元素的每个元素,nth-child(n)选取父元素的第 N 个子元素,与类型无关。
  2. os.rmdir只能删除空目录,否则报错;shutil.rmtree() 可递归删除文件夹下的所有子文件夹和子文件。
  3. 读写文件,记得统一编码,比如encoding=‘utf-8’。
python3爬取华为应用市场APP安装包实战 ** python3爬取华为应用市场APP安装包实战 ** 一、用浏览器访问华为应用市场,搜索APP并观察URL规律 比如我们要下载微信,那么在搜索框输入微信并回车,会发现url变成http://app.hicloud.com/search/%25E5%25BE%25AE%25E4%25BF%25A1,再搜索微博,发现又会跳转至http://app.hicloud.com/search/%25E5... 阅读详情

相关推荐

从小米应用商店爬取APK文件

从小米应用商店爬取APK文件 该代码实在原有代码的基础上做了一些小改动。原有代码连接:https://blog.youkuaiyun.com/Crab0314/article/details/89887024 改动后完整代码: # coding=utf-8 import urllib import requests import re from bs4 import BeautifulSoup import ...

vitA_gsm的博客 3709

Python Scrapy爬取华为应用市场APK信息

Python Scrapy是功能十分强大的爬虫框架,使用起来非常方便,下面讲解下爬取华为应用市场APK的过程。(1)安装Scrapy是第三方爬虫框架,需要先安装,我window上安装的是Python2.7,框架安装比较简单。依次执行下面的命令就可以安装成功。pip install scrapypip install pywin32如果电脑上安装的是Python3的版本,Scrapy框架安装麻烦点,...

不忘初心的专栏 3213

python学习心得(3)— 小米应用商店APK爬取

原因为了对大量Android样本进行分析,我们需要从不同的应用市场中对应用进行爬取 目标使用Python实现对于小米商城中的APK进行爬取,实现自动化爬取功能。 过程 解析对应网页元素,获取APK链接 获取每一个APK链接中下载链接 对下载链接进行访问,将返回数据保存到本地 找到是否有下一页的元素,从来获取下一页页面地址,重复上述操作 访问下一页的操作十分必要,这样才能够实现整个系统的自动化

qiuyu93422的博客 4585

python获取安装包包名_Appium+Python自动化 3 -获取 app 包名和 activity

方法一:①手机通过USB连接电脑②打开手机上被测app③在电脑上 dos命令窗口,输入命令adb shell dumpsys window w | findstr \/ | findstr name=或 adb shell dumpsys window |findstr mCurrent或 adb shell "dumpsys window w|grep \/|grep name=|sed 's/...

weixin_39926193的博客 1003

python学习心得(4)— 并发小米应用商城APK爬取

前言上一节中python学习心得(3)— 小米应用商店APK爬取介绍了如何进行爬取APK 对应源码为 https://github.com/QyMars/APKSpider/blob/master/XiaomiCrawler.py 并发单线程的进行下载,效率太低,为了实现并发,使用了Python中的Celery异步任务队列来实现并发源代码Github:https://github.com/Qy

qiuyu93422的博客 2427

20行Python代码爬取下载应用宝所有APP软件!太强了啊

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 基本环境配置 python 3.6 pycharm requests parsel 打开开发者工具分析网页 你怎么知道这个就是下载地址呢? 1、选择一个应用的下载地址 2、打开开发者工具,清空数据,选择Network 3、点击立即下载 4、就会发现下载地址 把链接地址复制,在网页源代码中搜索,查看是否网页是否有返回该数据 有数据:就可以直接请求网页获取..

爬遍所有网站 857

python爬取app并下载_python3.6+BeautifulSoup4.2 爬取各类app应用信息并下载app包

---------------环境配置---------------1、在Windows操作系统下安装python-3.6.4-amd64.exe2、配置环境变量Path变量:如C:\Users\Administrator\AppData\Local\Programs\Python\Python36\打开cmd命令窗口,输入:python命令,可以进入python 编辑命令行,即可。3、把beau...

weixin_33139275的博客 599

使用Python爬取华为市场游戏类APP应用

使用Python爬取华为应用市场内APP信息与APK下载做数据分析~

吴秋霖的博客 3853

python3 远程文件下载简单方法

python3 有自带的web服务器,需要进入cmd,并且一直开着cmd才可以一直使用。 1、进入需要作为下载和显示的文件夹(index页面会自动显示,也就看不到其他文件) cd D:****(文件所在位置) 2、输入下面代码,9528 是端口号 python -m http.server 9528 然后根据ip+端口号访问。例如:172.22.164.136:9528 ...

初学者_小铭 1716

VSAN闪存缓存磁盘故障处理指南-RAID0模式实战解析

本文详细解析了VSAN集群中RAID0模式下的闪存缓存磁盘故障处理全流程。通过模拟真实故障场景,从告警识别、数据重建策略到磁盘组重构,提供了手把手的实战操作指南,并深入探讨了RAID0缓存故障的独特影响与风险,为运维人员应对此类高性能存储架构的突发问题提供了专业解决方案。

assembly8low的博客 445

别再浪费NFC了!手把手教你用Android手机模拟门禁卡(Mifare Classic破解教程)

本文深入探讨Android NFC技术的核心原理与创新应用,教你如何利用手机模拟门禁卡(Mifare Classic破解教程),解锁智能生活的无限可能。涵盖NFC标签类型解析、HCE开发实战及安全实践,让你的Android设备成为数字生活的万能钥匙。

weixin_29239661的博客 230

python连接oracle数据库_python连接Oracle数据库的代码

python连接Oracle数据库的代码,需要引用cx_Oracle库#coding=UTF-8import cx_Oracledef hello():'''Hello cx_Oracle示例:1)打印数据库版本信息.2)查询表数据.'''conn = cx_Oracle.connect("obs61","obs61","tx8i.hp")cur = conn.cursor()try:print ...

weixin_39608132的博客 322

JESD204B系统设计实战:如何用SYSREF信号搞定多设备时钟同步(附时序图详解)

本文深入探讨了JESD204B系统中SYSREF信号在多设备时钟同步中的关键作用与实现技巧。通过详细分析SYSREF信号的生成、PCB布局和时序调整,提供了一套完整的解决方案,帮助工程师解决高速数据转换器与FPGA协同工作中的时钟同步问题。文章还包含时序图详解和实测调试技巧,助力提升系统性能。

weixin_29313239的博客 454

python 爬取小米商城的应用apk文件

本文在他人基础之上改良而成 本文仅做个人技术学习使用,不得用以危害他人权益!!!! 需在python 3.6下运行 # coding=utf-8 chengqiang import urllib import requests import re from bs4 import BeautifulSoup import random import time import s...

chengqiang0414的博客 1133

手把手教你学SIMULINK模块库文件专栏--Scope 模块详解

模块是 Simulink 中的一个信号接收模块,用于实时显示信号波形。该模块可以捕捉并可视化仿真过程中信号的变化,帮助用户直观地分析系统的动态行为。模块都能提供强有力的支持。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常实用的工具,适用于需要实时显示信号波形的各种场景。模块的参数,可以进一步增强学习体验。模块参数的影响,下面我们将详细探讨每个参数如何影响波形显示。

MHD0815的博客 312

IEC 104电力规约详细解读(五) - 遥控

主站下发遥控选择命令,子站进行遥控选择返校,若成功则回答遥控选择成功报文,若失败则回答失败报文。主站下发取消遥控命令或者遥控执行命令行。子站皆以报文的镜像确认。遥控命令用来实现对一个可操作设备状态的改变。在配电自动化中,包括单点命令和双点命令。通常,单点命令用于控制单点信息对象;双点命令用于控制双点信息对象。

张二狗的博客 7352

python写手机应用宝下载_APK 批量爬取脚本(应用宝和360市场)

python脚本批量下载apk文件(应用宝和360市场)360安卓市场下载 2000个,应用宝2000个代码中的下载路径自行更改运行截图image.png代码如下# -*- coding: utf-8 -*-import reimport urllibimport osclass class_360:def __init__(self):self.urllist=[]self.baseurl='h...

weixin_39602280的博客 819

UNet改进(52):轴向+代理注意力让UNet既轻快又精准

本文提出了一种改进的UNet架构,通过引入轴向注意力代理模块增强医学图像分割性能。该模块将二维自注意力分解为行列两个一维注意力操作,结合可学习代理节点进行全局信息聚合,在保持计算效率的同时提升模型对长距离依赖的建模能力。实验表明,该方法在多个医学图像数据集上较传统UNet提升3.2%-5.7%的Dice系数,边界质量显著改善。该方案特别适用于具有方向性结构的医学图像分割任务,如血管、器官等,在计算复杂度和分割精度之间实现了良好平衡。

2501_91516851的博客 327

使用python批量爬取apk文件

学习python期间,自己写的一个小的爬虫文件,从360应用市场下载接近两千个app,代码放在github里 # -*- coding: utf-8 -*- """ Created on Fri May 12 11:30:11 2017 @author: GXW """ import re import urllib import os #response=urllib.urlopen('h

baidu_26759899的博客 2187

MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(KEPserverOPC通信应用)

SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-优快云博客文章浏览阅读1k次。这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下:SMART PLC PID负压控制(过程量为负数)_负压控制pid控制程序_RXXW_Dor的博客-优快云博客1、如何实现PID反作用调节?S7-1200PLC和KEPserver OPC通信-优快云博客。

RXXW_Dor的博客 1781

Far planner代码系列(2)

graph_decoder系列(2) 承接上文 我们接着来看decoder_node.cpp的代码部分 void GraphDecoder::Init() { /* initialize subscriber and publisher */ //graph_sub_ 订阅节点/robot_vgraph 其类型是visibility_graph_msg/Graph的消息 graph_sub_ = nh.subscribe("/robot_vgrap...

博客 1534

【爬虫】分类爬取小米商店的apk

在网上找到了一篇文章 Python爬虫——爬取apk,写的很好,改造了一部分代码,如下 主要遇到的几个问题有: 问题1.ContentTooShort: 问题2.502 BadGateWay: 问题3.[WinError 10054] 远程主机强迫关闭了一个现有的连接 问题1,可能是由于网络不稳定引起的,解决方案自定义一个auto_download,加入try-catch重试机制...

不想做菜鸟的小螃蟹 2576

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python安卓手机爬虫_python爬虫实战之爬取安卓apk

当前市面上有大量的应用市场,这些应用市场作为各个安卓开发者的分发渠道,占据着重要的位置。如果我们需要批量下载apk用于研究,那么就需要用到爬虫技术,这里仅仅介绍一个简单的例子,即爬取应用宝上的apk。爬取apk首先需要找到该apk的展示页面,比如应用宝上的QQ下载页面,http://sj.qq.com/myapp/detail.htm?apkName=com.tencent.mobileqq,可以...

weixin_39528366的博客 2600

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python应用市场app爬虫_【Python实战】Scrapy豌豆荚应用市场爬虫

对于给定的大量APP,如何爬取与之对应的(应用市场)分类、描述的信息?且看下面分解。1. 页面分析当我们在豌豆荚首页搜索框输入微信后,会跳转到搜索结果的页面,其url为http://www.wandoujia.com/search?key=%微信。搜索结果一般是按相关性排序的;所以,我们认为第一条搜索结果为所需要爬取的。紧接着,点进去后会跳转到页面http://www.wandoujia.com/...

weixin_31300407的博客 762

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

小米手机 开发app python_Python 爬虫入门实例(爬取小米应用商店的top应用apk)

一,爬虫是什么?爬虫就是获取网络上各种资源,数据的一种工具。具体的可以自行百度。二,如何写简单爬虫1,获取网页内容可以通过 Python(3.x) 自带的 urllib,来实现网页内容的下载。实现起来很简单importurllib.requesturl="http://www.baidu.com"response=urllib.request.urlopen(url)html_content=re...

weixin_39602571的博客 587

python教程app下载地址_Python爬取APP下载链接的实现方法

首先是准备工作Python 2.7.11:下载python其中python2和python3目前同步发行,我这里使用的是python2作为环境。Pycharm是一款比较高效的Python IDE,但是需要付费。实现的基本思路首先我们的目标网站:安卓市场点击【应用】,进入我们的关键页面:跳转到应用界面后我们需要关注三个地方,下图红色方框标出:首先关注地址栏的URL,再关注免费下载按钮,然后关注底端的...

weixin_39638464的博客 360
上一篇: 对Android APK文件反编译查看其源码
下一篇: TensorFlow Lite编译Android so库
有何不可0307
博客等级 码龄12年 76粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值