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中文乱码的解决方法
Nov 04 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
详解Python pygame安装过程笔记
Jun 05 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
python实现彩色图转换成灰度图
Jan 15 Python
python的pstuil模块使用方法总结
Jul 26 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
Python3 webservice接口测试代码详解
Jun 23 Python
解决Pycharm 运行后没有输出的问题
Feb 05 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简单实现查询数据库返回json数据
2015/04/16 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
利用python获得时间的实例说明
2013/03/25 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
蓝颜请假条
2014/04/11 职场文书
护士节策划方案
2014/05/19 职场文书
2014年卫生工作总结
2014/11/27 职场文书
教师个人事迹材料
2014/12/17 职场文书
优秀教师个人总结
2015/02/11 职场文书
导游词300字
2015/02/13 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
关于python中模块和重载的问题
2021/11/02 Python