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 相关文章推荐
在Django框架中运行Python应用全攻略
Jul 17 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
通过实例了解python property属性
Nov 01 Python
详解Python实现进度条的4种方式
Jan 15 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 Python
Python面试不修改数组找出重复的数字
May 20 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配合jquery实现增删操作具体实例
2013/12/12 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
PHP abstract与interface之间的区别
2013/11/11 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
python推导式的使用方法实例
2021/02/28 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
PHP经典面试题
2016/09/03 面试题
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
个人找工作自荐信格式
2013/09/21 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
岗位职责说明书
2014/05/07 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript