mfc怎么获取进程的线程数_Python多线程获取小米应用商店App,看看我是怎么做到的

一、【项目背景】

小米应用商店给用户发现最好的安卓应用和游戏,安全可靠,可是要下载东西要一个一个的搜索太麻烦了。而且速度并不是很快。

今天小编就教大家利用多线程爬取小米应用商店的游戏模块,快速获取我们想要的软件安装包。

07380b76a1fd9053fc786e9cfaef02e0.png

二、【项目目标】

目标 :应用分类 - 聊天社交 应用名称, 应用链接,显示在控制台供用户下载。

三、【涉及的库和网站】

1、网址:百度搜 - 小米应用商店,进入官网。

2、涉及的库:requests、threading 、queue 、json、time

3、软件:PyCharm

四、【项目分析】

1、确认是否为动态加载。

通过页面局部刷新, 右键查看网页源代码,搜索关键字未搜到 。断定此网站为动态加载网站,需要抓取网络数据包分析。

2、使用chrome浏览器,F12抓取网络数据包。

1.1、抓取返回json数据的URL地址(Headers中的Request URL)。

http://app.mi.com/categotyAllListApi?page={}&categoryId=2&pageSize=30

1.2、查看并分析查询参数(headers中的Query String Parameters)。

page: 1categoryId: 2pageSize: 30

发现只有page再变,0 1 2 3 ... ... ,这样我们就可以通过控制page的直拼接多个返回json数据的URL地址。

五、【项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。准备导入库,url地址和请求头headers。

import requestsfrom threading import Threadfrom queue import Queueimport jsonimport timeclass  XiaomiSpider(object):    def __init__(self):      self.headers = {'User-Agent':'Mozilla/5.0'}      self.url = 'http://app.mi.com/categotyAllListApi?page={}&categoryId=15&pageSize=30'    def main(self):        passif __name__ == '__main__':    imageSpider =  XiaomiSpider()    imageSpider.main()

2、定义队列,用来存放URL地址

self.url_queue = Queue()

3、URL入队列

def url_in(self):    # 拼接多个URL地址,然后put()到队列中    for i in range(67):        self.url.format((str(i)))        self.url_queue.put(self.url)

4、定义线程事件函数get_page(请求数据)

defget_page(self):    # 先get()URL地址,发请求    while True:        # 当队列不为空时,获取url地址        if not self.url_queue.empty():            url = self.url_queue.get()            html = requests.get(url,headers=self.headers).text            self.parse_page(html)        else:            break

5、定义函数parse_page 解析json模块,提取应用名称,应用链接内容。

 # 解析函数def parse_page(self,html):    app_json = json.loads(html)    for app in app_json['data']:        # 应用名称        name = app['displayName']        # 应用链接        link = 'http://app.mi.com/details?id={}'.format(app['packageName'])        d = { '名称' : name,'链接' : link }        print(d)

6、main方法, 定义t_list = [] 存放所有线程的列表。调用get_page多线程爬取。

def main(self):    self.url_in()    # 存放所有线程的列表    t_list = []     for i in range(10):        t = Thread(target=self.get_page)        t.start()        t_list.append(t)

7、for循环遍历列表,统一回收线程。

# 统一回收线程for p in t_list:    p.join()

8、统计一下执行时间。

start = time.time()spider = XiaomiSpider()spider.main()end = time.time()print('执行时间:%.2f' % (end-start))

六、【效果展示】

1、运行程序。点击运行,将游戏名称,下载链接,执行时间,显示在控制台。

b86f14d5f146d36d54c399e5e8351c90.png

2、点击蓝色的网址可以直接去到下载页面下载应用,如下图所示。

3fb7c625c40f217973b496314947385d.png

七、【最后总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、Python多线程优点。使用线程可以把占据长时间的程序中的任务放到后台去处,程序的运行速度可能加快。

3、单线程可以被抢占(中断),而已多线程就有了更多的选择。而已在其他线程正在运行时,线程可以暂时搁置(也称为睡眠)。可以释放一些珍贵的资源如内存占用。

4、大家也可以尝试在爬取其他分类,按照操作步骤,自己尝试去做。自己实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

源码获取私信小编01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Distribution Timeline for 2010(Linux 2010 年发行版时间线/族谱/发展图)

此图来自维基百科(wikimedia),具体地址为:https://commons.wikimedia.org/wiki/File:Linux_Distribution_Timeline.svg?uselangzh-hans#filehistory

git强制推送_Git 常用命令

Git 常用命令总结1. GIT 工作区add commitworking directory ------- index(stage) ---------- HEAD | | | | | | 工作目录 暂存区 …

golang 泛型_Golang 1.x版本泛型编程

本文介绍了Golang 1.x版本的泛型编程。往期回顾:浅谈动态追踪技术Go是一门天生为服务器程序设计的简洁的语言,因此Go的设计原则聚焦在可扩展性、可读性和并发性,而多态性并不是这门语言的设计初衷,因此就被放在了一边。虽然在2.0版…

jwt令牌_JWT令牌的秘密轮换

jwt令牌当您使用JSON Web令牌 ( JWT )或需要对有效载荷信息进行签名或加密的任何其他令牌技术时,设置令牌的到期日期很重要,因此,如果令牌到期,则可以假定这可能被视为安全漏洞,您拒绝使用此令牌…

jasperreports_JasperReports:棘手的部分

jasperreports如果您使用Java进行编程的时间足够长,则有可能需要为业务用户生成报告。 就我而言,我已经看到几个项目使用JasperReportsLibrary来生成PDF和其他文件格式的报告。 最近,我荣幸地观察了Mike和他的团队使用上述报告库以及他们所面…

电脑运行adb闪退_adb+python进阶使用

之前文章有提到过使用python加adb刷视频,今天带来进阶版——无线多台手机。首先要使用adb连接多台手机,手机和电脑肯定要在统一局域网内。1.打开手机开发者模式,并通过USB接口链接电脑。2.打开cmd:输入adb tcpip 5555, 会得到相关…

java office在线编辑_国外10个最受欢迎的 Java 开发的 CMS 系统

CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子…

apache kafka_Apache Kafka简介

apache kafka什么是Apache Kafka? Apache Kafka是一个分布式流系统,具有发布和订阅记录流的功能。 在另一方面,它是企业消息传递系统。 它是一个快速,水平可扩展和容错的系统。 Kafka有四个核心API, 生产者API&#x…

人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质

原文链接:https://www.cnblogs.com/arthinking/p/13205303.html相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如:避免 select *;join字段走索引;慎用in和not in,用exists取代in&a…

rest资源设计_REST资源何时应获得其自己的地址?

rest资源设计在纯粹的REST方法中,所有端点(起始端点除外)都是不透明的,因此不需要发布其各种详细信息。 即使使用这种方法,本文中的要点也很重要,因为服务器逻辑将必须确定何时需要结束点。 介绍 在REST体…

ckeditor回显带标签_Spring Boot中带有CKEditor的AJAX

ckeditor回显带标签1.概述 在本文中,我们将介绍如何在Spring Boot中使用CKEditor 。 在本教程中,我们将导入一个包含大量数据的XML文档,对使用GET请求将一组数据加载到CKEditor实例的能力进行编程,并执行POST请求以保存CKEditor的…

android 可行性分析,可行性研究项目分析程序与步骤

项目分析程序项目分析分析工作步骤分析程序框架分段实施方法第一阶段初期工作1、收集资料。包括业主的要求,业主已经完成的研究成果,市场、厂址、原料、能源、运输、维修、共用设施、环境、劳动力来源、资金来源、税务、设备材料价格、物价上涨率等有关资…

原码一位乘法器设计_十分钟带你彻底搞懂原码、反码、补码

点击上方“程序员大白”,选择“星标”公众号重磅干货,第一时间送达编辑 | 程序员大白公众号来源丨https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html仅作学术交流,如有侵权,请联系删文本篇文章讲解了计算…

Linux 目录之 /etc/init.d/ 介绍

文章目录一、关于目录 /etc/init.d/二、关于目录 /etc/rc.d/init.d/三、关于文件 /etc/rc.local四、/etc/init.d/ 和 service 文件五、关于命令 service六、关于文件 /etc/inittab七、关于目录 /etc/init/注意:以 System V init 或者 Upstart 为初始化系统的 Linux …

java 异常处理发生异常_处理Java中的异常

java 异常处理发生异常每个程序员都希望编写一个完美的程序。 也就是说,程序运行时没有任何障碍。 好吧,如果希望是马,乞g就会骑。 除了程序员的所有愿望之外,有时还会发生无法预料的情况。 在Java中,这些无法预料的…

android提交项目到svn,Android Studio 配置SVN,通过Share project提交项目和实现忽略文件...

1:首先电脑本身装的SVN必须在bin目录下包含svn.exe文件,如下图。这个文件是在安装SVN时选择安装command line client tools才会出现。如果没有,需要重新安装SVN。2:将SVN关联到Android Studio中声明:在这里我使用的And…

数独游戏技巧从入门到精通_如何引导孩子入门九宫格数独?掌握4个技巧口诀,孩子思维提升快...

九宫格数独对孩子的思维训练有着非常不错的效果,我们完全可以用其培养孩子对数字的兴趣,并培养孩子严谨的逻辑推理态度。那九宫格数独有没有技巧口诀呢?对于孩子来说,过于复杂的技巧他们也掌握不了。所以,我们培养孩子…

Spring Boot和Apache Camel

随着软件世界的发展,正在开发更加复杂的系统,这些系统必须相互集成。 它从SOA开始,然后一直到微服务。 骆驼是我想到的第一大集成工具,因为如今的骆驼springboot是一个非常强大的组合。 第一步是将骆驼依赖项包含到我们的sprin…