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



在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:大周末的导师早上比我来的早,现在还在做实验。老师都这个年纪了,还这么拼!实在让我汗颜。

年轻人就是要干到底!

 

 

猜你喜欢

转载自blog.csdn.net/qq_35353824/article/details/83933159