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基础教程之自定义函数介绍
Aug 29 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
Django和Flask框架优缺点对比
Oct 24 Python
python 创建一维的0向量实例
Dec 02 Python
python绘制彩虹图
Dec 16 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
Python 串口通信的实现
Sep 29 Python
python logging模块的使用详解
Oct 23 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 Python
pandas 操作 Excel操作总结
Mar 31 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中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
python抓取网页中的图片示例
2014/02/28 Python
Python jieba库用法及实例解析
2019/11/04 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
python实现最速下降法
2020/03/24 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
QML实现钟表效果
2020/06/02 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
售后服务承诺书
2014/03/26 职场文书
保护环境的标语
2014/06/09 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
产品调价通知函
2015/04/20 职场文书
英语教学课后反思
2016/02/15 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
golang import自定义包方式
2021/04/29 Golang
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python