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自动格式化json文件的方法
Mar 11 Python
简单的编程0基础下Python入门指引
Apr 01 Python
Python爬虫模拟登录带验证码网站
Jan 22 Python
Python中的条件判断语句基础学习教程
Feb 07 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
selenium+python自动化测试之多窗口切换
Jan 23 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 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
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
微信小程序入门教程
2016/11/18 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
构建和谐校园倡议书
2015/01/19 职场文书
学校重阳节活动总结
2015/03/24 职场文书
甲午风云观后感
2015/06/02 职场文书
贫困证明怎么写
2015/06/16 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript
使用CSS实现音波加载效果
2023/05/07 HTML / CSS