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 03 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
pandas实现to_sql将DataFrame保存到数据库中
Jul 03 Python
pytorch 自定义数据集加载方法
Aug 18 Python
python防止随意修改类属性的实现方法
Aug 21 Python
python随机数分布random均匀分布实例
Nov 27 Python
python内置模块collections知识点总结
Dec 19 Python
如何将json数据转换为python数据
Sep 04 Python
python识别验证码的思路及解决方案
Sep 13 Python
python实现简单区块链结构
Apr 25 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新手谈谈我的学习心得
2007/02/25 PHP
PHP EOT定界符的使用详解
2008/09/30 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
jquery插件之easing使用
2010/08/19 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
js的各种排序算法实现(总结)
2016/07/23 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
基于python实现操作redis及消息队列
2020/08/27 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
《掌声》教学反思
2014/02/23 职场文书
社区服务活动小结
2014/07/08 职场文书
Tomcat弱口令复现及利用
2022/05/06 Servers