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 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
Python单例模式的两种实现方法
Aug 14 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
解决pycharm运行出错,代码正确结果不显示的问题
Nov 30 Python
Python 通过打码平台实现验证码的实现
May 13 Python
python 函数中的内置函数及用法详解
Jul 02 Python
Python实现上下文管理器的方法
Aug 07 Python
python实现简单贪吃蛇游戏
Sep 29 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
pycharm实现猜数游戏
Dec 07 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 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 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
Javascript浅谈之this
2013/12/17 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
github配置使用指南
2014/11/18 Python
使用python加密自己的密码
2015/08/04 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
python 容器总结整理
2017/04/04 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
婚礼司仪主持词
2014/03/14 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
项目经理岗位职责
2015/01/31 职场文书
社区节水倡议书
2015/04/29 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
浅谈JS的二进制家族
2021/05/09 Javascript
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android