# Web_mining **Repository Path**: geoffreylam/Web_mining ## Basic Information - **Project Name**: Web_mining - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Web_mining_Final——小米应用商店游戏类APP相关数据 ## 数据加值宣言 - 本项目运用了scrapy中的spiders进行数据挖掘,爬取了小米应用商店中游戏类app的详细信息。 ## 数据最小可用产品 - 爬取到的数据可用于竞品分析和对于当下Android端手机游戏的市场调查,以分析市场对于手机游戏的态度以及欢迎程度,方便产品经理对竞品更新迭代进行分析后与开发团队沟通。 ## 挖掘Query参数 图标icon;名字name;类型type_id;包名pack;软件大小size;版本version;更新时间update_time;产品特性features ## 思路方法及具体执行 - 确定所要挖掘的数据对象为小米应用商店和具体使用scrapy的spiders工具。 - 本项目所爬取到的数据:[APP.csv](https://gitee.com/geoffreylam/Web_mining/blob/master/mishop/app.csv) ``` # -*- coding: utf-8 -*- import csv import json import scrapy import requests from lxml import html as htm # 模拟浏览器 USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" class AppSpider(scrapy.Spider): name = 'app' def start_requests(self): #构造爬取地址列表 urls = [] r = requests.get("http://app.mi.com/") html = htm.fromstring(r.text) id_list = html.xpath('//ul[@class="category-list"]/li/a/@href') type_list = [] # 保存类别标签 id for i in range(len(id_list)): type_list.append(id_list[i].split("/")[-1]) for i in type_list[0:1]: urls.append("http://app.mi.com/categotyAllListApi?page=0&categoryId={}&pageSize=20".format(i)) #写入成csv表格标题 data = [['name', 'icon', 'type', 'package', 'company', 'size', 'version', 'features', 'update_time']] #打开文件句柄 file = open('app.csv','a+',encoding ='utf-8', newline="") #csv操作对戏 csv_writer = csv.writer(file) #写入csv表头 csv_writer.writerows(data) #关闭文件流 file.close() for url in urls: yield scrapy.Request(url=url,headers={"User-Agent": USER_AGENT},callback=self.parse) #解析请求结果 def parse(self, response): if response.body: result = json.loads(response.body) data = result["data"] total = [] for i in data: # 图标 icon = i["icon"] # 名字 name = i["displayName"].replace("·","") # 类型 type_id = i["level1CategoryName"] # 包名 package = i["packageName"] r = requests.get("http://app.mi.com/details?id={}".format(package)) html = htm.fromstring(r.text) companyName = html.xpath('//div[@class="intro-titles"]/p[1]/text()')[0] # 软件大小 size = html.xpath('//ul[@class=" cf"]/li[2]/text()')[0] # 版本 version = html.xpath('//ul[@class=" cf"]/li[4]/text()')[0] # 更新时间 update_time = html.xpath('//ul[@class=" cf"]/li[6]/text()')[0] # 新版特性 features = html.xpath('//div[@class="app-text"]/p[@class="pslide"][2]/text()') if features: features = features[0] else: features = "" total.append([name, icon, type_id, package, companyName, size, version,features,update_time]) file = open('app.csv','a+',encoding ='utf-8', newline="") csv_writer = csv.writer(file) csv_writer.writerows(total) file.close() ``` ## 心得总结及感谢 - 数据的重要性今非昔比,数据的挖掘是可以十分详细且全面的,本次运用了scrapy框架进行了数据挖掘。令我意识到单单掌握了获得数据的技能是不够的的,重要的在于对于数据的清洗和集成。然而之后涉及到的数据分析,很可惜本学期没有选修到pandas数据分析这门课,无法发挥数据的全部作用。感谢老师的悉心指导和同学对本项目做出的帮助。 - 感谢[小米应用商店](http://app.mi.com/)