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获取一组汉字拼音首字母的方法
Jul 01 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
分享python数据统计的一些小技巧
Jul 21 Python
python list是否包含另一个list所有元素的实例
May 04 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
python对象与json相互转换的方法
May 07 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
Python一键安装全部依赖包的方法
Aug 12 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
解决中英文字符串长度问题函数
2007/01/16 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
JavaScript省市联动实现代码
2014/02/15 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
javascript简易画板开发
2020/04/12 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Python PyQt5整理介绍
2020/04/01 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
员工工作表扬信范文
2014/01/13 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
新年晚会主持词
2014/03/24 职场文书
《荷花》教学反思
2014/04/16 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
毕业典礼邀请函
2015/01/31 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
2019个人工作总结
2019/06/21 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
利用python进行数据加载
2021/06/20 Python