编写这个原生爬虫项目的3个主要目的:

1.巩固 python 基础知识
2.了解合理的编码规范和方式
3.了解爬虫基本原理

项目分析:

1.爬取网站: 熊猫TV(https://www.panda.tv/cate/lol)
2.爬虫目的: 爬取英雄联盟游戏分类下面所有主播的人气排行
3.爬虫步骤:
  (1).明确要爬取的网站数据
  (2).分析并了解所要爬取的网站结构,找到数据所在标签位置
  (3).确定定位标签
    确定定位标签原则:
    ①尽量选取具有唯一标识的标签
    ②尽量选取最接近所要提取数据的标签
    ③尽量选取可以闭合的标签
  (4).编写代码
    ①通过 urllib 库模拟 http 请求, 向服务器发送这个请求, 获取到服务器返回的 html(通常会是网页完整的 html)
    ②用正则表达式提取需要的数据(主播的用户名、人气)
    ③对所爬取的数据进行清洗, 提炼出符合格式的数据
    ④根据业务需求对爬取到的数据进行排序
    ⑤展示数据

网页分析:

  1. 分析页面, 图中标记的两个数据分别是要爬取的用户名和观看人数

    01. 爬虫所要爬取的页面

  2. 找到包含 "用户名和观看人数" 所在标签, 可以发现 "用户名和观看人数" 分别位于 class 为 "video-nickname" 和 "video-number" 的两个 <span> 标签中, 将 class 为 "video-info" 所在的 <div> 标签作为定位标签

    02. 找到包含 "用户名和观看人数" 所在标签

    03. 确定定位标签

项目完整代码:

import re
from urllib import request
'''
想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
'''
class Spider(object):"""爬取熊猫TV 网站英雄联盟游戏分类下面所有主播的人气排行"""# 用类变量 url 来保存所要爬取的网页的地址url = "https://www.panda.tv/cate/lol"# 定义所需的正则匹配模式root_pattern = '<div class="video-info">([\s\S]*?)</div>'name_pattern = '</i>([\s\S]*?)</span>'number_pattern = '<span class="video-number">([\s\S]*?)</span>'def __fetch_content(self):"""获取网页内容"""# 用变量 r 来保存通过 request 请求网址所返回的 response 对象r = request.urlopen(Spider.url)# 用 read 方法读取出 r 对象的数据, 并将得到的 html 数据赋值给 htmls 变量htmls = r.read()# 因为通过 r.read() 获取的 htmls 是 bytes(字节码),# 而我们最终想要获取 str(字符串), 所以这里需要转码htmls = str(htmls, encoding="utf-8")return htmlsdef __analysis(self, htmls):"""分析并提取所要爬取的数据"""# 利用正则匹配出定位标签里的数据root_htmls = re.findall(Spider.root_pattern, htmls)# anchors 列表用来存储所要提取的数据anchors = []for html in root_htmls:# 利用正则将定位标签里获取的数据再次匹配, 提取出用户名和观看人数name = re.findall(Spider.name_pattern, html)number = re.findall(Spider.number_pattern, html)# 将用户名和观看人数组装成字典anchor = {"name": name, "number": number}anchors.append(anchor)return anchorsdef __refine(self, anchors):"""数据精炼, 对数据进行清洗"""for anchor in anchors:anchor["name"] = anchor["name"][0].strip()anchor["number"] = anchor["number"][0].strip()return anchorsdef __sort(self, anchors):"""对数据进行排序"""anchors = sorted(anchors, key=self.__sort_seed, reverse=True)return anchorsdef __sort_seed(self, anchor):"""排序方法 __sort 的种子方法, 可以通过此方法来确定排序依据"""r = re.findall("\d*", anchor["number"])number = float(r[0])if "万" in anchor["number"]:number *= 10000return numberdef __show(self, anchors):"""打印数据"""for rank in range(0, len(anchors)):print("rank %s: %s    %s" % (rank+1, anchors[rank]["name"], anchors[rank]["number"]))def go(self):"""入口方法(总控方法), Spider 类内部所有方法的调用都通过 go 方法来调用"""htmls = self.__fetch_content()anchors = self.__analysis(htmls)anchors = self.__refine(anchors)anchors = self.__sort(anchors)self.__show(anchors)spider = Spider()
spider.go()

测试代码:

Python爬取熊猫TV 英雄联盟游戏分类下面所有主播的人气排行相关推荐

  1. 适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)

    今天来个简单的小项目,适合新手拿来练手,在OPGG上爬取英雄联盟里的法师,ADC,打野,辅助所有英雄的胜率及选取率,是不是感觉很高大上,但是却很简单,只要用三十多行代码就能实现,详细讲解每一行代码加注 ...

  2. bs4爬取的时候有两个标签相同_利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息!...

    一.分析网站内容 本次爬取网站为opgg,网址为:" http://www.op.gg/champion/statistics " 由网站界面可以看出,右侧有英雄的详细信息,以Ga ...

  3. python爬取率_利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息

    一.分析网站内容 由网站界面可以看出,右侧有英雄的详细信息,以Garen为例,胜率为53.84%,选取率为16.99%,常用位置为上单 现对网页源代码进行分析(右键鼠标在菜单中即可找到查看网页源代码) ...

  4. python原生爬虫爬取熊猫TV LOL主播人气排行

    本文采取phthon原生爬虫,没有采用常用的爬虫框架,比较适合新手练手. 首先进入熊猫TV英雄联盟主页----https://www.panda.tv/cate/lol?pdt=1.24.s1.2.4 ...

  5. python爬取斗鱼当前英雄联盟主播排名

    python爬取斗鱼当前英雄联盟主播排名 代码 # 目的:爬取斗鱼英雄联盟当前主播的排名 # 找到对应网页 # 分析排名和名称相对的位置# 模拟HTTP请求,获取HTML数据 # 用正则表达式获取对应 ...

  6. 用python爬取3dm上的单机游戏评测信息

    用python爬取3dm上的单机游戏评测信息 参考结果 #爬取3dm上单机游戏评测榜,50页的相关信息import requests from lxml import etree headers={& ...

  7. Python爬取王者荣耀英雄的皮肤数据并下载皮肤图片项目

    Python爬取王者荣耀英雄的皮肤数据,并下载皮肤图片!高清的图片用来做桌面也不错哟~ 网址:https://pvp.qq.com/web201605/herolist.shtml 1.获得英雄信息, ...

  8. 教你用python爬取王者荣耀英雄皮肤图片,并将图片保存在各自英雄的文件夹中。(附源码)

    教你用python爬取王者荣耀英雄皮肤图片,并将图片保存在各自英雄的文件夹中.(附源码) 代码展示: 保存在各自的文件夹中 美么? 让我们开始爬虫之路 开发环境 windows 10 python3. ...

  9. Python爬取 | 王者荣耀英雄皮肤海报

    这里只展示代码,具体介绍请点击下方链接. Python爬取 | 王者荣耀英雄皮肤海报 import requests import re import os import time import wi ...

最新文章

  1. 边缘计算 — 与硬件厂商
  2. ALE IDoc RFC of SAP
  3. MySQL为什么要使用内连接而不用外连接
  4. yolov3代码详解_代码资料
  5. Linux基本信号的使用
  6. 智齿客服Android集成流程,一种基于编程语言接入智齿客服的方法以及电子设备与流程...
  7. web前端自学入门视频教程分享
  8. js如何获取jwt信息_谈房地产公众号如何涨粉?一篇文章让你轻松获取信息
  9. 模板多个列表级联_如何使用word制作模版?word怎样使用模板?
  10. excel vba 快速显示及隐藏所选数据行,并获取多重选择区地址的行列号
  11. Win-MASM64汇编语言-LEA指令
  12. 小程序block标签配合if和else 和 动态修改标题栏
  13. 华中数控808系统说明书_国产数控系统的性能水平
  14. 快速处理倒车影像的设计研究与实现
  15. 文本智能处理与RPA领军企业达观数据宣布完成5.8亿元C轮融资
  16. 【重磅】凯文.凯利8个小时演讲实录
  17. [活动]和Jeffery大师的最近距离
  18. python中天天向上的力量实例
  19. 台式计算机中远程登录在哪里,电脑如何进行远程连接
  20. 驱动专题:第四章MTD及Flash驱动 3. nandflash 详细硬件特性

热门文章

  1. PageHelper 补充
  2. 大二一个学期学这么点内容,没有概念,只有实操
  3. PS磨皮插件Ultimate Retouch Panel
  4. linux 软件备份 主从,linux高可用(HA)keepalived 主从备份
  5. B/S 开发和 C/S开发的区别
  6. 蓝牙耳机怎么挑选?推荐新手小白入门式高性价比蓝牙耳机
  7. 计算机学开发,Lazarus
  8. linux 第一章 不要怂就是干
  9. 会声会影制作视频翻页转场教程
  10. 探讨蓄电池对UPS电源寿命的影响