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调用命令行进度条的方法
May 05 Python
Python如何生成树形图案
Jan 03 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
python把1变成01的步骤总结
Feb 27 Python
机器学习实战之knn算法pandas
Jun 22 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
基于python使用tibco ems代码实例
Dec 20 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
python实现语音常用度量方法的代码详解
May 25 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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
截获网站title标签之家内容的例子
2006/10/09 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
jQuery 使用手册(四)
2009/09/23 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
JavaScript多线程详解
2015/08/12 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
Python的条件语句与运算符优先级详解
2015/10/13 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
python使用多进程的实例详解
2018/09/19 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
PHP统计代码行数的小代码
2019/09/19 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
工程造价专业大学生自荐信
2013/10/01 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
周年庆促销方案
2014/03/15 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
推普标语口号大全
2015/12/26 职场文书
幼儿园中班教学反思
2016/03/03 职场文书