最近学习了一大堆和大数据相关的东西,Hadoop、Elastic、Python等。写一个简单的实战项目贯通一下。爬取一下某牙直播平台的人气排行。

一.确定自己需要的数据,并找到最适合爬取的页面

首先我们需要找到最适合爬取的页面。一般而言最好是一个展示列表。在这个爬虫,最适合的页面肯定是游戏分类页面。

  • 如图所示红框圈出的部分,是我们需要的数据。

二.分析数据所在的标签

 用浏览器的开发者调试工具,可以很方便的查看标签信息。在选取标签的时候,我们最好遵循两个原则:
  1. 尽量寻找具有唯一性的标签
  2. 尽量距离所需内容最近的定位标签


我们需要的是,主播名和观看人数标签,这两个标签被一个打的 li 标签所包含。不难发现每一个 li 包含一个主播的信息。隐藏这正是我们需要的信息。

三.模拟http获取服务器返回的html
分析完页面数据,终于可以开始编写爬虫代码了。

    url = 'https://www.huya.com/g/wzry'headers = {'cookie': 'Hm_lvt_51700b6c722f5bb4cf39906a596ea41f=1564389526; __yasmid=0.40853709224889045; __yamid_tt1=0.40853709224889045; __yamid_new=C88A54814D100001D1791CD16F0019D9; _yasids=__rootsid%3DC88A54814DB0000113A7D4A71FB71BBD; PHPSESSID=vbo6lo3mjm62rmrc3hpe4o03s0; Hm_lpvt_51700b6c722f5bb4cf39906a596ea41f=1564389529; udb_passdata=3; SoundValue=0.50; alphaValue=0.80; isInLiveRoom=true','User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"}@staticmethoddef __fetch_content(self):'''执行网页访问'''req = request.Request(Spider.url, None, Spider.headers)r = request.urlopen(req)htmls = r.read()htmls = str(htmls, encoding='utf-8')return htmls
  • 需要注意的是,大多数网站都有简单的返爬虫验证,会判断你的访问,是否是正常通过浏览器访问的,会验证浏览器的cookie信息等。
  • 同样使用浏览器调试工具,我们可以很方便的查看页面请求的header 头信息,并进行模拟.

四.用正则表达式提取我们需要的信息

  • 现在正常情况,我们可以获取到页面的html代码。如果有获取不到的情况,还是网站反爬虫方面的限制。这里就不做过多研究了。

  • 那么如何从上千行代码中提取到自己需要的数据呢?这里就需要借助强大的正则匹配了。

  • 上面我们分析了,我们需要获取的是<li class="game-live-item" gid="1"> 这个为开头的标签,因此正则表达式不容易就设置为<li class="game-live-item" gid="1"> (.*)?</li>

  • 然后正常情况下,我们需要对获取的每组 li 内部的元素,再进行正则匹配,提取我们需要的数据。然而在这次的爬虫中,对方使用了接口,动态获取数据。无法通过标签获取数据,但是我们可以直接获取返回的 json 数据,然后转成dict。进行筛选处理。

 root_pattern = '(?<=var LIST_DATA =).*?](?=;)'def __analysis(self, htmls):'''正则匹配页面数据标签'''html = re.findall(Spider.root_pattern, htmls)html = html[0].strip("'")html = html.strip(" ")# json转码return json.loads(html)

五.存储和展示数据

  • 最终我们获取到了数据了,in this case 我们需要对数据进行简单的排序,使用python 内置的 sorted() 函数,可以很轻松的实现这个功能。

贴上所有代码:

from urllib import request
import re
import jsonclass Spider():url = 'https://www.huya.com/g/wzry'root_pattern = '(?<=var LIST_DATA =).*?](?=;)'headers = {'cookie': 'Hm_lvt_51700b6c722f5bb4cf39906a596ea41f=1564389526; __yasmid=0.40853709224889045; __yamid_tt1=0.40853709224889045; __yamid_new=C88A54814D100001D1791CD16F0019D9; _yasids=__rootsid%3DC88A54814DB0000113A7D4A71FB71BBD; PHPSESSID=vbo6lo3mjm62rmrc3hpe4o03s0; Hm_lpvt_51700b6c722f5bb4cf39906a596ea41f=1564389529; udb_passdata=3; SoundValue=0.50; alphaValue=0.80; isInLiveRoom=true','User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"}@staticmethoddef __fetch_content(self):'''执行网页访问'''req = request.Request(Spider.url, None, Spider.headers)r = request.urlopen(req)htmls = r.read()htmls = str(htmls, encoding='utf-8')return htmlsdef __analysis(self, htmls):'''正则匹配页面数据标签'''html = re.findall(Spider.root_pattern, htmls)html = html[0].strip("'")html = html.strip(" ")# json转码return json.loads(html)def __refine(self, anchors):'''精炼数据'''datas = []for anchor in anchors:data = {'name' : anchor['nick'],'number' : anchor['totalCount']}datas.append(data)return datasdef __sort(self, anchors):# 数据排序anchors = sorted(anchors, key=self.__sort_sedd, reverse = True)return anchorsdef __sort_sedd(self, anchor):# 排序处理return int(anchor['number'])def __show(self, anchors):'''展示排行榜数据'''for anchor in anchors:print(anchor['name'] + '----' + anchor['number'] + '人')def go(self):'''入口方法'''htmls = self.__fetch_content(self)anchors = self.__analysis(htmls)anchors = self.__refine(anchors)anchors = self.__sort(anchors)self.__show(anchors)spider = Spider()
spider.go()

贴上整个过程简单的思维导图( 后续还会更新 )

用Python实现原生爬取某牙直播平台数据相关推荐

  1. Python爬虫,爬取51job上有关大数据的招聘信息

    Python爬虫,爬取51job上有关大数据的招聘信息 爬虫初学者,练手实战 最近在上数据收集课,分享一些代码. 分析所要爬取的网址 https://search.51job.com/list/000 ...

  2. python + selenium多进程爬取淘宝搜索页数据

    python + selenium多进程爬取淘宝搜索页数据 1. 功能描述 按照给定的关键词,在淘宝搜索对应的产品,然后爬取搜索结果中产品的信息,包括:标题,价格,销量,产地等信息,存入mongodb ...

  3. 如何去使用Python爬虫来爬取B站的弹幕数据?

    哔哩哔哩众所周知是弹幕的天堂,视频观看人数越多,弹幕也就越多.今天小千就来教大家如何去使用Python开发一个爬虫来爬取B站的弹幕数据. 1.弹幕哪里找? 平常我们在看视频时,弹幕是出现在视频上的.实 ...

  4. Python爬虫:爬取华为应用市场app数据

    爬取华为应用商店的所有APP名称和介绍,因为页面数据是ajax异步加载的,所以要找到对应的接口去解析数据. 爬取华为应用市场app数据 一.分析网页 1. 分析主页 2. 分析appid 3. 分析u ...

  5. Python 超简单爬取微博热搜榜数据

    微博的热搜榜对于研究大众的流量有非常大的价值.今天的教程就来说说如何爬取微博的热搜榜. 热搜榜的链接是: https://s.weibo.com/top/summary/ 用浏览器浏览,发现在不登录的 ...

  6. 利用Python Scrapy框架爬取“房天下”网站房源数据

    文章目录 分析网页 获取新房.二手房.租房数据 新房数据 租房数据: 二手房数据 反反爬虫 将数据保存至MongoDB数据库 JSON格式 CSV格式 MongoDB数据库 分析网页 "房天 ...

  7. 利用python+scrapy+mysql爬取虎扑NBA球员数据存入数据库

      大家好,这是我的第一篇博客,写的不好请见谅. 小编是个多年的NBA观众,最近正值季后赛的比赛,闲来无事,突发奇想,想利用刚刚所学的python著名爬虫框架scrapy采集一下全NBA的球员基本信息 ...

  8. [python爬虫] BeautifulSoup爬取+CSV存储贵州农产品数据

    在学习使用正则表达式.BeautifulSoup技术或Selenium技术爬取网络数据过程中,通常会将爬取的数据存储至TXT文件中,前面也讲述过海量数据存储至本地MySQL数据库中,这里主要补充Bea ...

  9. python使用requests爬取淘宝搜索页数据

    前一段时间负责爬取淘宝的一些商品信息,本来接到爬取淘宝的任务的时候,下意识的就想用selenium(毕竟淘宝有点不好搞).但是使用selenium时搜索页面也得需要登录,并且当使用selenium时不 ...

最新文章

  1. 算法面试经常需要你手写的三个排序算法(Python语言)
  2. 安徽中职计算机专业对口高考,安徽对口高考和普通高考有什么区别?
  3. java都市男人心痒痒_会让男人心痒痒的女人,是懂得套路的
  4. 2d unity 多物体 射线_24小时入门Unity游戏开发系列教程
  5. cad打开a3样板图形_cad a3图框下载-cada3标准图框模板 dwg版 - 河东下载站
  6. 房产交易进化:探索“去中介”无人区
  7. SpringBoot FlyWay报错:Detected applied migration not resolved locally:
  8. Java基础知识面试题(2021最新版)
  9. Yii Framework 开发教程(30) Zii组件-ListView 示例
  10. 【CCF推荐专区】计算机类优质SCIEI好刊,期刊质量高,部分期刊仅有少量版面
  11. 数字序列 Number Sequence
  12. Unable to negotiate with xx.xx port xx: no matching host key type found. Their offer: ssh-rsa....
  13. execve系统调用_系统调用execve的入口sys_execve() | 学步园
  14. Java基础之刨根问底第1集——JVM的结构
  15. 问题 J: 老肖数等式
  16. Springboot 序列化空对象报错解决办法
  17. bios密码解锁软件_YOGA14S解锁BIOS后进阶玩法—包含性能提升10%—20%
  18. Webrtc Native C++在root模式下启用PulseAudio,音频采集替换为ALSA模式
  19. 数据分析实战:python热门音乐分析 附代码+数据 +论文(PCA 主成分分析,sklearn 机器学习,pytorch 神经网络,k-means 聚类,Librosa 音频处理,midi 音序)
  20. layaBox配置vscode开发环境

热门文章

  1. matlab的输入输出
  2. 阿里云开放平台微前端方案的沙箱实现
  3. 怎么在html中创建单选按钮?
  4. python元组和列表逆序_Python容器:列表与元组
  5. linux清除文件后df还是满的,Linux系统下如何用du和df命令清除大文件?
  6. 安卓rom包解包linux,[ROM开发]解包打包ROM详细教程 2017.9.8更新安卓7.0
  7. 手写C语言之函数概念-函数分类-实参与形参-传值调用与传址调用介绍(11)
  8. SVN Tortoise小乌龟在repo-browser上右键删除了文件目录 回滚解决办法
  9. 如何运用VR3d模型线上展示构建博物馆展厅与展馆
  10. SVN服务端和客户端搭建教程