Python爬虫过程解析之多线程获取小米应用商店数据


Posted in Python onNovember 14, 2020

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于IT共享之家 ,作者IT共享者

前言

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

今天用多线程爬取小米应用商店的游戏模块。快速获取。

Python爬虫过程解析之多线程获取小米应用商店数据

二、项目目标

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

三、涉及的库和网站

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

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

3、软件:PyCharm

四、项目分析

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

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

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

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

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

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

page: 1
categoryId: 2
pageSize: 30

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

五、项目实施

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

import requests
from threading import Thread
from queue import Queue
import json
import time
class 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):
pass
if __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、运行程序。点击运行,将游戏名称,下载链接,执行时间,显示在控制台。

Python爬虫过程解析之多线程获取小米应用商店数据

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

Python爬虫过程解析之多线程获取小米应用商店数据

到此这篇关于Python爬虫过程解析之多线程获取小米应用商店数据的文章就介绍到这了,更多相关Python多线程获取小米应用商店数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
深入学习Python中的装饰器使用
Jun 20 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
利用python如何在前程无忧高效投递简历
May 07 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
python代码xml转txt实例
Mar 10 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
无惧面试,带你搞懂python 装饰器
Aug 17 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 #Python
Python join()函数原理及使用方法
Nov 14 #Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 #Python
利用python 下载bilibili视频
Nov 13 #Python
详解python polyscope库的安装和例程
Nov 13 #Python
python中的测试框架
Nov 13 #Python
Python加载数据的5种不同方式(收藏)
Nov 13 #Python
You might like
php简单静态页生成过程
2008/03/27 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
开始着手第一个Django项目
2015/07/15 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
浅谈django orm 优化
2018/08/18 Python
Python get获取页面cookie代码实例
2018/09/12 Python
在Python中COM口的调用方法
2019/07/03 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
Java语言的优势
2015/01/10 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
简历的自我评价范文
2014/02/04 职场文书
应届生求职信
2014/05/31 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
2014年教研员工作总结
2014/12/23 职场文书
寻找成龙观后感
2015/06/12 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python