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之画圈还不简单吗?
Sep 20 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
json跨域调用python的方法详解
Jan 11 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
10个Python面试常问的问题(小结)
Nov 20 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
Python Charles抓包配置实现流程图解
Sep 29 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反转字符串函数strrev()函数的用法
2012/02/04 PHP
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
PHP实现递归无限级分类
2015/10/22 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
运算符&&的三个不同层次
2013/04/07 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
python的列表List求均值和中位数实例
2020/03/03 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
办公室前台的岗位职责
2013/12/20 职场文书
农村葬礼主持词
2014/03/31 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
学校校庆演讲稿
2014/05/22 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
同学聚会开幕词
2019/04/02 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis