案例--原生爬虫



# -*- coding:utf-8 -*-


"""
    爬虫前奏:
            爬取熊猫tv各个主播的名字和人气值
            明确目的
            找到数据对应的网页
            分析网页的结构找到数据所在的标签位置

            模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML
            用正则表达式提取我们要的数据(比如主播名字,人气)


"""

import re
from time import sleep

from urllib import request


class Spider():
    url = 'http://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):
        # 模仿http请求
        r = request.urlopen(Spider.url)

        # 从目标url获取页面所有内容,获取值为数字
        htmls = r.read()
        # 将页面内容代号转化为字符串,即网页内容
        htmls = str(htmls, encoding='utf-8')
        return htmls

    def __analysis(self, htmls):
        root_html = re.findall(Spider.root_pattern, htmls)

        anchors = []
        for html in root_html:
            name = re.findall(Spider.name_pattern, html)
            number = re.findall(Spider.number_pattern, html)
            anchor = {'name': name, 'number': number}
            anchors.append(anchor)
        return anchors

    def __refine(self, anchors):
        '''
            lambda匿名函数, anchor为匿名函数的参数
            {}内是匿名函数的内容
            函数实现列表内容转化为单一的字符串
        '''
        l = lambda anchor: {
            'name': anchor['name'][0].strip(),
            'number': anchor['number'][0]
        }
        '''
            map()函数将l方法遍历添加到anchors中
        '''
        return map(l, anchors)

    def __sort(self, anchors):
        # filter
        # sorted()内key代表比较点,因为此函数不能直接比较字典
        # key值给一个开放的函数,让别人自定义内容排名
        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 rank in range(0, len(anchors)):
            print('rank  ' + str(rank + 1)
                  + '  : ' + anchors[rank]['name']
                  + '    ' + anchors[rank]['number'])

    def go(self):

        htmls = self.__fetch_content()
        anchors = self.__analysis(htmls)
        anchors = list(self.__refine(anchors))
        anchors = self.__sort(anchors)
        self.__show(anchors)


spider = Spider()


while True:
    spider.go()
    sleep(5)




































rank  1  : 贾克虎丶虎神    129.9万
rank  2  : 君克解说    35.8万
rank  3  : LOL丶摇摆哥    20.3万
rank  4  : Riot国际赛事直播间    6.4万
rank  5  : 熊猫Tv丶狮子汪    4.9万
rank  6  : 左手QAQ    4.1万
rank  7  : 熊丶猫TV小新    3.3万
rank  8  : LPL熊猫官方直播    2.9万
rank  9  : 抗寒使者    2.4万
rank  10  : 温州丶黄小明    2.3万
rank  11  : 空大的劫zz    1.8万
rank  12  : 御天文哥丶    1.2万
rank  13  : 暴君aa    1.2万
rank  14  : 顺顺套路王    1.0万
rank  15  : 请叫我大腿岩丶    7156
rank  16  : 破晓Abner    6891
rank  17  : 上单教官李某人    5124
rank  18  : 童哥一v一    5031
rank  19  : 走A龙龟    4915
rank  20  : 熊猫TV丶小志诺手    4792
rank  21  : 一个很C的稻草人    4577
rank  22  : 牛老师丶    4552
rank  23  : 韦国君    3810
rank  24  : 贼可爱的小亮亮    3342
rank  25  : 熊猫LCS直播间    2811
rank  26  : 这个赵信有丶C    2691
rank  27  : 迷心哥哥    2627
rank  28  : 冰雪丶狐狸    2573
rank  29  : 黑秧    2558
rank  30  : 琳琪baby    2429
rank  31  : 言希cc    2384
rank  32  : 幸福哥儿    2221
rank  33  : 0不懂wAAAAA    2166
rank  34  : 七哥卡牌丶    2086
rank  35  : 你的小老虎i    2024
rank  36  : Panda丶冰冰    2010
rank  37  : 传海老大    1894
rank  38  : 我爱吃烤鸭丶    1883
rank  39  : 瓜神z    1853
rank  40  : 魔剑神无敌    1832
rank  41  : 我的傻喵    1816
rank  42  : 小羊啊丶    1800
rank  43  : 梁老师的作死大头    1798
rank  44  : 叶芯丶    1774
rank  45  : 江西丶社会强    1766
rank  46  : 峡谷第三伊芙琳    1714
rank  47  : 小小de期待    1692
rank  48  : SevenOwO    1684
rank  49  : 伽耳伽耳    1680
rank  50  : fuckink    1632
rank  51  : 沫兮cc    1626
rank  52  : 尼丿玛    1556
rank  53  : 大洋洋y    1551
rank  54  : 师天然    1477
rank  55  : 吃藕人的小丑    1446
rank  56  : 啦啦Lara丶    1441
rank  57  : 南京欧阳浪    1440
rank  58  : 自闭症晚期患者z    1425
rank  59  : 小白菜嗷呜    1411
rank  60  : 时间刺客浅浅    1404
rank  61  : 熊猫TV丶萌阿琦i    1393
rank  62  : 乡下帅小伙    1383
rank  63  : RS小强    1363
rank  64  : Panda丶浅唱小生    1350
rank  65  : 紫疯丶    1336
rank  66  : 超辣ouo    1331
rank  67  : 雁回阿    1327
rank  68  : 机器猫mmm    1298
rank  69  : 一只小果酱儿    1284
rank  70  : 七天灿灿    1200
rank  71  : 冷面寒枪人马神    1196
rank  72  : 请叫我越塔怪    1140
rank  73  : lol官方赛事英文台    1135
rank  74  : 我是你筒哥    1135
rank  75  : 李砖一丶    1122
rank  76  : 陈小贱丶丶丶    1100
rank  77  : AhDai丶    1043
rank  78  : 凶猛的14哥哥    1039
rank  79  : 学不乖的吉木人    1034
rank  80  : 丨熊猫丨野马    1031
rank  81  : panda丶tv峰丶峰    1024
rank  82  : 把手放在空中甩丶    1005
rank  83  : 文希宝宝    972
rank  84  : 疯哥哥    971
rank  85  : 丿梦灬十年    912
rank  86  : 冰女人丶    897
rank  87  : 啊斗斗斗    896
rank  88  : 酸甜不辣小仙嘉    879
rank  89  : 627091丶柠檬    847
rank  90  : 北鼻盖伊    828
rank  91  : 步子丶    826
rank  92  : 白竹ing    779
rank  93  : 艾特Shen    778
rank  94  : 熊猫TV猪小伟    773
rank  95  : 居居豹子    773
rank  96  : panda丶雄鹰    755
rank  97  : Dpo3    748
rank  98  : 我来教你玩剑姬    741
rank  99  : 筱海男枪丶    740
rank  100  : Panda丶小财神    737
rank  101  : 暖攻音的拾命    737
rank  102  : 七区逗比凌    728
rank  103  : 朱四世    725
rank  104  : tayoto    717
rank  105  : 七凢    717
rank  106  : 你微笑时很美丶zy    715
rank  107  : 熊猫小刘同学    714
rank  108  : 亦然ovo    707
rank  109  : 我有高贱需要发表    707
rank  110  : 新人凌小铄    705
rank  111  : 喜欢馒头丶    701
rank  112  : 恍如夢镜    700
rank  113  : 我怀念的san    697
rank  114  : 丶莫茕    691
rank  115  : 蔓妍得旺仔小馒头    690
rank  116  : 熊猫2086761武神    687
rank  117  : 就叫我阿神把    686


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值