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编程中的包结构
Oct 25 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
win与linux系统中python requests 安装
Dec 04 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
Python3.5集合及其常见运算实例详解
May 01 Python
Python 控制终端输出文字的实例
Jul 12 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
python3 实现口罩抽签的功能
Mar 11 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 Python
python爬虫--selenium模块
Mar 31 Python
Python中快速掌握Data Frame的常用操作
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购物车实现代码
2011/10/10 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
python使用scrapy解析js示例
2014/01/23 Python
python调用java的Webservice示例
2014/03/10 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
让 python 命令行也可以自动补全
2014/11/30 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Python 多维List创建的问题小结
2019/01/18 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
质检员的岗位职责
2013/11/15 职场文书
一份创业计划书范文
2014/02/08 职场文书
文秘求职信范文
2014/04/10 职场文书
职位说明书范文
2014/05/07 职场文书
企业晚会策划方案
2014/05/29 职场文书
导游词幽默开场白
2019/06/26 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers