python语言的原理_Python语言爬虫原理

本文主要向大家介绍了Python语言爬虫原理,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本篇是在学习Python基础知识之后的一次小小尝试,这次将会爬取熊猫TV网页上的王者荣耀主播排名,在不借助第三方框架的前提下演示一个爬虫的原理。一、实现Python爬虫的思路第一步:明确目的1.找到想要爬取数据的网页2.分析网页结构,找到需要爬取数据所在的标签位置第二步:模拟Http请求,提取数据,加工数据1.模拟Http网络请求,向服务器发送请求,获取服务器返回给我们的html2.使用正则表达式从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 = '

([\s\S]*?)

'

#正则:获取主播名

reString_name = '([\s\S]*?)'

#正则:获取视频浏览量

reString_number = '([\s\S]*?)'

def __fetch_content(self):

'''

请求网络,获取整个网页的Hmtl字符串

'''

r = request.urlopen(Spider.url)

data = r.read()

htmlString = str(data,encoding="utf-8")        return htmlString    def __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 anchors    def __refine(self,anchors):

'''

将数据进一步提炼,去除空格等多余字符

'''

f = lambda anchor :{"name":anchor["name"][0].strip(),"number":anchor["number"][0]}

newAnchors = list(map(f,anchors))        #print(newAnchors)

return newAnchors    def __sort(self,anchors):

'''

数据分析:排序浏览量从大到小

'''

anchors = sorted(anchors,key=self.__sort_seed,reverse = True)        return anchors    def __sort_seed(self,anchor):

'''

排序规则

'''

list_nums = re.findall('\d*',anchor["number"])

number = float(list_nums[0])        if '万' in anchor["number"]:

number = number * 10000

return number    def __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()然后,我们将看到如下的打印效果

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值