本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云,作者:梧雨北辰

是在学习Python基础知识之后的一次小小尝试,这次将会爬取熊猫TV网页上的王者荣耀主播排名,在不借助第三方框架的前提下演示一个爬虫的原理。

一、实现Python爬虫的思路

第一步:明确目的

1.找到想要爬取数据的网页
2.分析网页结构,找到需要爬取数据所在的标签位置

第二步:模拟Http请求,提取数据,加工数据

1.模拟Http网络请求,向服务器发送请求,获取服务器返回给我们的html
2.使用正则表达式从Html中提取我们需要的数据(比如本例中的主播名字和人气)
3.对提取的数据进行加工,显示成我们可以直观查看的形式

二、查看网页源码,观察关键值

我们应该首先找到需要处理的网页,即:熊猫TV网页上的王者荣耀,然后查看这个网页的源代码,观察我们需要关注的数据在哪个位置,下面是截取的网页效果图:

网页.png

然后,我们需要在浏览器中查看当前网页的Html源码,不同的浏览器中查看的操作会有所不同,这个需要自行百度一下。此次我们需要拿到每个主播的名字和视频浏览量,从下面源码中我们可以很快发现这些关键数据的位置,如图中的标注:

Html源码.png

三、实现Python爬虫的具体实践

下面就是实现爬取数据的具体操作了,这里是创建了一个爬虫类Spider,然后使用不同的正则获取Html标签里的数据,进而将其重新整理后打印显示,具体的代码如下:
from urllib import request   #导入模块urllib,用于发起网络请求,获取数据
import re                    #导入模块re,用于实现正则提取信息class Spider():#需要抓取的网络链接url = "https://www.panda.tv/cate/kingglory"#正则:获取显示视频信息的div代码串reString_div = '<div class="video-info">([\s\S]*?)</div>'   #正则:获取主播名reString_name = '</i>([\s\S]*?)</span>'#正则:获取视频浏览量reString_number = '<span class="video-number">([\s\S]*?)</span>'def __fetch_content(self):'''请求网络,获取整个网页的Hmtl字符串'''r = request.urlopen(Spider.url)data = r.read()htmlString = str(data,encoding="utf-8")return htmlStringdef __alalysis(self,htmlString):'''使用正则初步获取数据,得到主播信息(主播名和浏览量)的数组'''videoInfos = re.findall(Spider.reString_div,htmlString)anchors = []#print(videoInfos[0])for html in videoInfos :name = re.findall(Spider.reString_name,html)number = re.findall(Spider.reString_number,html)anchor = {"name":name,"number":number}anchors.append(anchor)#print(anchors[0])return anchorsdef __refine(self,anchors):'''将数据进一步提炼,去除空格等多余字符'''f = lambda anchor :{"name":anchor["name"][0].strip(),"number":anchor["number"][0]}newAnchors = list(map(f,anchors))#print(newAnchors)return newAnchorsdef __sort(self,anchors):'''数据分析:排序浏览量从大到小 '''anchors = sorted(anchors,key=self.__sort_seed,reverse = True)return anchorsdef __sort_seed(self,anchor):'''排序规则'''list_nums = re.findall('\d*',anchor["number"])number = float(list_nums[0])if '万' in anchor["number"]:number = number * 10000return numberdef __show(self,anchors):'''展示数据,将已经排序好的数据打印出来'''for rank in range(0,len(anchors)):print("第" + str(rank+1) +"名:" + anchors[rank]["number"] + "\t"  + anchors[rank]["name"])def startRun(self):'''程序入口,开始运行爬虫'''htmlString = self.__fetch_content()anchors = self.__alalysis(htmlString)anchors = self.__refine(anchors)anchors  = self.__sort(anchors)self.__show(anchors)#创建爬虫类,爬取数据
spider = Spider()
spider.startRun()

然后,我们将看到如下的打印效果:

执行爬虫.png

实现Python爬虫的思路、原理相关推荐

  1. Python爬虫设计思路

    Python爬虫设计思路 一.爬虫架构 爬虫调度端:一般指的入口函数,发起动作的入口. URL管理器:存放待爬取网站的URL和已爬取过的URL的功能(python内存.关系数据库.缓存数据库). 网页 ...

  2. Python 爬虫没有思路?可以看看这篇文章

    可以说爬虫是学习 Python 的入门必修课.当能独立写出第一个完整的爬虫的时候,我们已经迈出了一大步.因为在这过程中,我们已经学会了如何查看文档,学会使用 Python 相关库的操作,怎样使用 Ch ...

  3. python爬虫设计思路_python网络爬虫(9)构建基础爬虫思路

    目的意义 基础爬虫分5个模块,使用多个文件相互配合,实现一个相对完善的数据爬取方案,便于以后更完善的爬虫做准备. 这里目的是爬取200条百度百科信息,并生成一个html文件,存储爬取的站点,词条,解释 ...

  4. python爬虫简单架构原理及示例

    网页下载器示例: # coding:utf-8 import urllib2 import cookielib url = "http://www.baidu.com"print ...

  5. python爬虫什么意思-Python爬虫是什么意思有啥用 python爬虫原理实例介绍

    据华为中国官方消息,今日,华为中国发文<小白看过来,让Python爬虫成为你的好帮手>,文中详细介绍了Python爬虫的工作原理,我们来看一下吧. 以下为<小白看过来,让Python ...

  6. python爬虫百科-python爬虫百科

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 专业点来说就是应用多台机器同时实现爬虫任务,这多台机器上的爬虫,就是称作分布式爬虫 ...

  7. python爬虫抓取图片-python网络爬虫源代码(可直接抓取图片)

    在开始制作爬虫前,我们应该做好前期准备工作,找到要爬的网站,然后查看它的源代码我们这次爬豆瓣美女网站,网址为:用到的工具:pycharm,这是它的图标 ...博文来自:zhang740000的博客 P ...

  8. python爬虫的用途_python爬虫用途

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 专业点来说就是应用多台机器同时实现爬虫任务,这多台机器上的爬虫,就是称作分布式爬 ...

  9. python爬虫代码-python网络爬虫源代码(可直接抓取图片)

    在开始制作爬虫前,我们应该做好前期准备工作,找到要爬的网站,然后查看它的源代码我们这次爬豆瓣美女网站,网址为:用到的工具:pycharm,这是它的图标 ...博文来自:zhang740000的博客 P ...

最新文章

  1. 阮一峰在 GitHub 又一开源力作!
  2. 今天做了一个DNN的模块,填到它默认的home页(关于DNN新建模块无法操作)
  3. Clojure Web 开发 -- Ring 使用指南
  4. 微软的FreeBSD社区推广活动 北京站,你没看错!微软现在是一家名副其实的开源公司
  5. python获取文件夹里有什么文件+查看特定格式的文件
  6. (39)FPGA面试技能提升篇(nandflash接口)
  7. JNA调用DLL函数遇到的几个问题
  8. LINUX使用gpg签名校验文件
  9. 广东电网公司大数据平台初步建成
  10. java12安装和配置_JDK12 安装和环境变量配置
  11. webpack搭建react脚手架
  12. Javaweb的HTML的表单标签
  13. 欢乐喜剧人宋晓峰吟诗大全
  14. 自监督学习经典之作:DINO
  15. ZeroDivisionError: integer division or modulo by zero解决记录
  16. 2月14,情人节双语送祝福!
  17. 关于网页抓取的10个误区(最新)
  18. 深度学习-【语义分割】学习笔记4 膨胀卷积(Dilated convolution)
  19. [openwrt] [WIFI] 修改默认的SSID和密码
  20. KD2684S绕组匝间故障检测仪

热门文章

  1. FusionCharts.js代码
  2. 魔百盒 修改时间服务器,魔百盒网关服务器下发超时
  3. 中职一年级计算机学情分析,学情分析
  4. H3C交换机SSH登录配置
  5. IDEA翻译插件 : Translation 安装及使用 解决Google翻译不能使用【保姆级教学】
  6. Tkinter - events and bindings事件绑定
  7. ValueError: The truth value of a DataFrame is ambiguous. Use a.empty 解决办法。(附 if 深层理解)
  8. java日期时间详解
  9. leetcode1229. 安排会议日程
  10. Java Web应用开发——作业四