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简单日志处理类分享
Feb 14 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
PyQt5实现简单数据标注工具
Mar 18 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
pow在python中的含义及用法
Jul 11 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Python中print函数简单使用总结
Aug 05 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
如何在python中实现ECDSA你知道吗
Nov 23 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
基于mysql的论坛(7)
2006/10/09 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
python版本的读写锁操作方法
2016/04/25 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python绘制组合图的示例
2020/09/18 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
地质工程专业毕业生求职信
2014/08/08 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
受伤赔偿协议书
2014/09/24 职场文书
企业计划生育责任书
2015/05/09 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
Java获取字符串编码格式实现思路
2022/09/23 Java/Android