python 爬取英雄联盟比赛数据(二)-- 数据爬取(一)

本贴最后更新于 1931 天前,其中的信息可能已经水流花落

null

1.总目标:爬取 2019 年英雄联盟职业联赛夏季赛常规赛战队每场比赛部分数据
今日目标:爬取每场对局大场的部分比赛数据(再稍微介绍一下这个比赛的模式,每大场比赛为三局两胜)

2.网址:https://www.scoregg.com/schedule

3.打开网址我们关注下面这部分内容:
null
这里每切换一次可以展示 7 天的比赛数据,类似于分页,然后每页 7 条(也可以理解为每页展示 7 天的数据)数据。
4.图中【查看日历】可以选择想查看的日期,【赛事筛选】选择你要查看的比赛,这里我们选择【2019LPL 夏季赛】
这个夏季赛的比赛日期是从 2019.6.1 开始到 2019.8.18 结束,如果你选择到 6.1 查看,你会发现数据是从 2019.5.27 开始的,当然 5.27 是没有比赛的,5.27-5.31 都没有比赛,返回的数据也是空。
null
5.说这么多为了什么,主要是我发现通过发送请求获取到的数据并没有单日的,每次都是返回 7 条数据,就是说你请求 2019.5.27 会返回 2019.5.27-2019.6.2 的比赛数据。我把请求的日期做一下分组,每组 7 个,分组后的日期如下:
null
可能你会问这个日期格式比较奇怪为什么不是 yyyy-MM-dd,这个是因为请求的时候日期参数就是我上图中的这种格式。
6.我们先完成大局的比赛数据爬取,就是大局谁赢了,两个队伍各赢了几局,以及比赛日期等一些数据
数据库表设计,id 不设置自增,爬取到的数据回包含比赛 ID,我们直接使用就好。关于“win_team_id”说明:我们要爬取这个网站关于 LPL 所有队伍的基本信息(这部分不是最重要的,后续我会贴出来代码)
null
null
“win_team_id”对应上图中的 team_id
7.下面进入代码部分了,我们使用 Scrapy 框架,主要是刚刚学了这个框架,别的框架(不会 😰 )以后学了再尝试
① 创建项目 scrapy startproject 项目名,项目结构如下:
null
②"data_handle.py"是我自己创建的主要的爬取逻辑要在这个文件里面完成
③ 关于 data_handle.py 代码:

import scrapy import bs4 import datetime import json from ..items import dataMatchParent def dateRange(beginDate, endDate): dates = [] dates_return = [] dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d") date = beginDate[:] while date <= endDate: dates.append(date) dt = dt + datetime.timedelta(1) date = dt.strftime("%Y-%m-%d") # return dates for i in range(len(dates)): date_new = dates[i].split("-") dates_return.append('%d-%d-%d' % (int(date_new[0]), int(date_new[1]), int(date_new[2]))) return dates_return class dataHandle(scrapy.Spider): name = 'LPL2019SummerLeague' allowed_domain = ['www.scoregg.com'] #循环发送请求,按照分页来理解,就是每页7条数据,一共12页,但是这个有空值情况(没有比赛的时候) def start_requests(self): all_dates_list=[] #因为请求的参数最关键的就是日期参数,我们率先处理日期参数 dates_list = dateRange("2019-05-27","2019-08-18") #将返回的日期参数分组,每组7个 for k in range(0,len(dates_list),7): seven_dates_list = [] for j in range(k,k+7): seven_dates_list.append(dates_list[j]) all_dates_list.append(seven_dates_list) #参数组装,date参数是最关键的,通过循环给date不同的值进行获取数据 params = { "api_path": "services/match/web_math_list.php", "gameID": "1", "date": "", "tournament_id": "120", "api_version": "9.9.9", "platform": "web" } for i in range(len(all_dates_list)): params["date"]=all_dates_list[i][0] print('---------------') print(params) yield scrapy.FormRequest( url = "https://www.scoregg.com/services/api_url.php", formdata=params, callback=self.parse ) def parse(self,response): print('--------------------') data_dic = json.loads(response.text)["data"]["list"] for key in data_dic: if data_dic[key]: info_list=data_dic[key]["info"]["120"] match_data_list = info_list['list'] for m in range(len(match_data_list)): win_team_id = "" match_id = int(match_data_list[m]["match_id"]) team_id_a = match_data_list[m]["teamID_a"] team_id_b = match_data_list[m]['teamID_b'] team_a_win = match_data_list[m]['team_a_win'] team_b_win = match_data_list[m]["team_b_win"] if int(team_a_win) > int(team_b_win): win_team_id = team_id_a else: win_team_id = team_id_b #时间要转换为数据库的datetime格式 start_date_time_str = match_data_list[m]['start_date']+" "+match_data_list[m] ['start_time'] start_date_time_dt = datetime.datetime.strptime(start_date_time_str,'%Y-%m-%d %H:%M') match_attr_id = match_data_list[m]["tournamentID"] item_match_p = dataMatchParent() item_match_p["match_id"] = match_id item_match_p["team_id_a"] = team_id_a item_match_p["team_id_b"] = team_id_b item_match_p["team_a_win"] = team_a_win item_match_p["team_b_win"] = team_b_win item_match_p["match_attr_id"] = match_attr_id item_match_p["start_date_time"] = start_date_time_dt item_match_p["win_team_id"] = win_team_id yield item_match_p

④ 爬取结果:
null
⑤ 在 pipelines.py 中进行数据库操作
⑥ 关于 Scrapy 框架:
Scrapy 框架 的核心是 Scrapy Engine(引擎)负责统一调度框架里面的各个工具,这些工具有:
Scheduler(调度器),负责处理引擎发送过来的 requests 对象即网页请求的相关信息集合,包括 params,data,cookies,request headers…等),会把请求的 url 以有序的方式排列成队,并等待引擎来提取(功能上类似于 gevent 库的 queue 模块);
Downloader(下载器)则是负责处理引擎发送过来的 requests,进行网页爬取,并将返回的 response(爬取到的内容)交给引擎。它对应的是爬虫流程【获取数据】这一步。
Spiders(爬虫)主要任务是创建 requests 对象和接受引擎发送过来的 response(Downloader 爬取到的内容),从中解析并提取出有用的数据。它对应的是爬虫流程【解析数据】和【提取数据】这两步。
Item Pipeline(数据管道)只负责存储和处理 Spiders 提取到的有用数据。这个对应的是爬虫流程【存储数据】这一步。
Downloader Middlewares(下载中间件)的工作相当于下载器的秘书,比如会提前对引擎大 boss 发送的诸多 requests 做出处理。
Spider Middlewares(爬虫中间件)则相当于爬虫的秘书,比如会提前接收并处理 Scrapy Engine 发送来的 response,过滤掉一些重复无用的东西。

到此今日目标就完成了,下一步我们会爬取每一大场里面的小场次比赛数据。敬请期待。。。

👍 转载标明出处

  • 英雄联盟
    11 引用 • 56 回帖
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 674 回帖
  • LPL
    1 引用
  • 2019
    60 引用 • 464 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 76 回帖 • 1 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 382 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 5 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 56 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 546 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 9 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 412 关注
  • Excel
    31 引用 • 28 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    289 引用 • 4492 回帖 • 654 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 399 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 736 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 639 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖 • 1 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 278 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 63 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 145 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    950 引用 • 943 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 2 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 207 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖