用python实现的一个简单的爬虫

利用Python基础知识,包括包的导入、类的定义、正则表达式等,实现从某直播平台爬取主播姓名及观众人数,并进行排序展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



在MOOC上学完了python的入门课程后,实现课后的一个小作业。

 对应的python的基础:

对之前学到的python的基础知识有了一个很好的回顾。用到的基本知识有:包的导入,类的定义,if语句,for语句,字典,列表,的操作,正则的应用,sort函数的应用,lambda表达式,map函数。

 

 小程序的效果:

可以爬取某直播平台分区下主播的姓名及观众的人数,并对爬取得数据进行排序。

import re #导入库
from urllib import request #导入库中的方法
#定义一个类
class Spider():
    url = 'https://www.panda.tv/cate/lol?pdt=1.24.s1.3.6mavo55dcno'
    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.urlopen(Spider.url) #打开链接
        htmls = r.read() #读取链接的内容
        htmls = str(htmls, encoding = 'utf-8') #将其转化为字符串
        return htmls

    #对数据进行分析
    def __analysis(self, htmls):
        root_html = re.findall(Spider.root_pattern,htmls) #用正则表达式提取字符串中有效的部分,root_html的类型是list
        anchors = []
        #用for循环遍历list
        for html in root_html:
            name = re.findall(Spider.name_pattern, html) #用正则匹配有效名字
            number = re.findall(Spider.number_pattern, html) #用正则匹配有效数字
            anchor = {'name':name, 'number':number} #将信息封装成dict
            anchors.append(anchor) #将字典放进新的list
        return anchors

   #排序函数
    def __sort(self, anchors):
        anchors = sorted(anchors, key= self.__sort_seed,reverse = True)
        return anchors

    #生成排序种子的函数
    def __sort_seed(self, anchor):
        r = re.findall('\d*', anchor['number']) #正则匹配数字
        number = float(r[0])
        if '万' in anchor['number']: #对“万”进行区别处理
            number *= 10000
        return number

    #显示函数(排序结果)
    def __show(self, anchors):
        for anchor in anchors:
            print(anchor['name']+ '------'+anchor['number'])

    #精炼信息函数
    def __refine(self, anchors):
        l = lambda anchor:{'name':anchor['name'][0].strip(),
                           'number':anchor['number'][0]}
        return map(l, anchors)

    #入口函数
    def go(self):
        htmls = self.__fetch_content()
        anchors = self.__analysis(htmls)
        #print(anchors[8])
        anchors = list(self.__refine(anchors))
        anchors = self.__sort(anchors)
        self.__show(anchors)


spider = Spider()
spider.go()

 


学习的过程中,写写博客记录一下自己的学习过程!

ps:大周末的导师早上比我来的早,现在还在做实验。老师都这个年纪了,还这么拼!实在让我汗颜。

年轻人就是要干到底!

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值