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进阶教程之模块(module)介绍
Aug 30 Python
Python迭代和迭代器详解
Nov 10 Python
python3使用smtplib实现发送邮件功能
May 22 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
Pytest中conftest.py的用法
Jun 27 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
express框架下使用session的方法
2019/07/31 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python实现的密码强度检测器示例
2017/08/23 Python
Django实现网页分页功能
2019/10/31 Python
python列表推导式入门学习解析
2019/12/02 Python
Python 面向对象部分知识点小结
2020/03/09 Python
pygame实现弹球游戏
2020/04/14 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Python 合并拼接字符串的方法
2020/07/28 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
爱我中华教学反思
2014/04/28 职场文书
保护地球的标语
2014/06/17 职场文书
物理教育专业求职信
2014/06/25 职场文书
中专生自荐信
2014/06/25 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
关于python爬虫应用urllib库作用分析
2021/09/04 Python