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 Deque 模块使用详解
Jul 04 Python
python通过shutil实现快速文件复制的方法
Mar 14 Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
python2和python3在处理字符串上的区别详解
May 29 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
python实现人工智能Ai抠图功能
Sep 05 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
python用opencv 图像傅里叶变换
Jan 04 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
php xml-rpc远程调用
2008/12/19 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python3如何解决字符编码问题详解
2017/04/23 Python
python中比较两个列表的实例方法
2019/07/04 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
小学生自我评价范例
2013/09/24 职场文书
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
给儿子的表扬信
2014/01/15 职场文书
五一活动标语
2014/06/30 职场文书
工会工作先进事迹
2014/08/18 职场文书
会议接待欢迎标语
2014/10/08 职场文书
七一建党节慰问信
2015/02/14 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技