虎牙爬虫练习2019-07-10

1.明确爬虫目的

爬虫目的需要我们明确的,没有目的的爬虫都是耍流氓!像我这次爬虫目的能不能从网页上爬下来。

2.怎么来爬?

a. 先要找到具有唯一性的标签

  • 炸姐ADC的直播大神推荐

    S8定位赛开始了11-0  裁决已解决炸姐ADC炸姐ADC67.0万
  • 开始的时候我选取的是,虽然这个标签中涵盖了我们需要的主播名字和主播的粉丝量,但是,如果我们用正则表达式提取的时候,如果使用贪婪模式的时候,提取的信息就比上面多太多了,如果用非贪婪模式的时候,

    提取的内容也就只有下面这些:

    炸姐ADC炸姐ADC

    缺失了主播的粉丝数,那么选取的标签就是不合理的。

    如果我们选择

  • 这个标签的时候就不会出现问题的。

    b. 尽量选取匹配的信息

    假想一下,如果我们只是获得主播名字,然后再获取主播粉丝,那么信息就对不上了,所以我们要选取匹配的信息。选取下面的就很合理。

  • 炸姐ADC的直播大神推荐

    S8定位赛开始了11-0  裁决已解决炸姐ADC炸姐ADC67.0万
  • c. 尽量选取他们的父级标签

    3. 简单点的爬虫思路

    a. 模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML

    b.用正则表达式获取我们想要的数据

    4.开始爬

    附上源码(每个函数都解释的很清楚):

    fromurllibimport requestimport reclass Spider():

        url ='http://www.huya.com/g/lol'    root_pattern ='

  • ([\w\W]*?)
  • '    one_pattern ='([\s\S]*?)'    one_pattern_name ='>([\s\S]*?)'#模拟HTTP请求(私有方法)def__fetch_content(self):


            r = request.urlopen(Spider.url)

            htmls=r.read()

            #如果不转成str的格式的话,就会造成机器卡顿htmls= str(htmls,encoding='utf-8')

            return htmls

        #数据分析def__analynize(self,htmls):

            rs = re.findall(Spider.root_pattern,htmls)

            star_lists = []


            forrin rs:

                rz = re.findall(Spider.one_pattern,r)

                #粉丝数follwers = re.findall(Spider.two_pattern,r)

                #主播名字name = re.findall(Spider.one_pattern_name,str(rz))

                #Spider.result[str(rzz[0])]=str(rx[0])star_list = {'name':name,'follwers':follwers}

                star_lists.append(star_list)

            return star_lists

        #数据精炼(提高数据的可靠性)def__refine(self,star_lists):

            func =lambda star_list:{

                'name':star_list['name'][0],

                'follwers':star_list['follwers'][0]

                }

            return map(func,star_lists)

        #业务处理(这里以排序代替)def__sort(self,star_end_lists):

            star_end_lists = sorted(star_end_lists,key=self.__key_access,reverse=True)

            return star_end_lists

        #key的排序规则def__key_access(self,star_end_list):

            num = re.findall('\d*',star_end_list['follwers'])

            num = float(num[0])


            if'万'instar_end_list['follwers']:

                num=num*10000return num

        #数据的后续处理(可以存入数据库)def__show(self,star_end_lists_sorted):

            print('------虎牙LOL主播粉丝的排行榜------')

            foriinrange(1,len(star_end_lists_sorted)):

                print('排名:'+str(i)+''+star_end_lists_sorted[i-1]['name']+''+star_end_lists_sorted[i-1]['follwers'])

        #爬虫入口    def go(self):

            r1 = self.__fetch_content()

            star_lists = self.__analynize(r1)

            star_end_lists = self.__refine(star_lists)

            star_end_lists_sorted = self.__sort(list(star_end_lists))

            self.__show(star_end_lists_sorted)

    spider = Spider()

    spider.go()

    运行结果:

    ------虎牙LOL主播粉丝的排行榜------排名:1  卡尔  71.9万

    排名:2  毒纪  36.1万

    排名:3  LCK冠军联赛  17.7万

    排名:4  LPL职业联赛  16.0万

    排名:5  MH、金灿毅ChanE  12.6万

    排名:6  聆听-旋律  9.5万

    排名:7  董月月  8.2万

    排名:8  完美OB  7.9万

    排名:9  芜湖神  6.3万

    排名:10  叶子yasuo  5.2万

    排名:11  第一吸血鬼屿水  3.5万

    排名:12  灭世冷漠  3.3万

    排名:13  最快锐雯风神  3.4万

    排名:14  娇宝的老公李青强  2.2万

    排名:15  纪小鹿  2.1万

    排名:16  菜鸡文  1.9万

    排名:17  八神  1.4万

    排名:18  幼灵梦  1.5万

    排名:19  虎牙丶柯南  1.0万

    排名:20  小僧空空  9972排名:21  潘神丶  9392排名:22  开森的小唯美  8888排名:23  阿俊z  8712排名:24  90818丶追梦  8678排名:25  铸哥  8010排名:26  二A  7915排名:27  烟雨丶青蛙瑞兹  7824排名:28  吐司  6774排名:29  正恒丶小白  6635排名:30  844-暮笙小爷  5972排名:31  国服第一赵信小雨  5655排名:32  雨雾-小杰人马  5564排名:33  正恒丶兔子  5479排名:34  先锋丶婉清  5417排名:35  可乐剑姬  5379排名:36  节奏  4985排名:37  腾嘉-熊大  4959排名:38  正恒丶小鱼  4923排名:39  844-雯雯  4779排名:40  雨雾-阿龙赵信  4416排名:41  娱加-萌小希  4373排名:42  虎丶牙莎莉  4020排名:43  十年锐雯  4013排名:44  正恒丶伊芙神  3999排名:45  亚古兽  3972排名:46  虎牙东方梦魇  3888排名:47  猴王一心  3806排名:48  谁明浪子心  3694排名:49  浩东德莱文  3539排名:50  正恒丶芒果  3350排名:51  兆辉-风度人影剑度天  3347排名:52  耀弟-最强武器  3120排名:53  觅寻哟  3049排名:54  天亿-Aarou  2916排名:55  先锋GJ丶空城男刀  2812排名:56  爱拍-阿浩  2682排名:57  Autism  2672排名:58  叶包包丶  2571排名:59  固执  2529排名:60  Huya丶薄荷  2505排名:61  阿明  2490排名:62  兆辉-瑶神皎月  2475排名:63  何遇是个帅卡特i  2472排名:64  悦儿  2416排名:65  5斧德莱文丶秒杀  2211排名:66  正恒丶小雪  2197排名:67  会好的  2151排名:68  飘逸  2147排名:69  娱加-U妮  2144排名:70  铭人丶千姿  2038排名:71  虎牙直播-蔸  1992排名:72  无心瑞兹  1979排名:73  逍遥  1954排名:74  悟道沙皇  1934排名:75  光锡兰博  1918排名:76  开开皇子  1874排名:77  正恒丶小贼  1782排名:78  泽佳琴女  1713排名:79  娱加-杨思涵  1712排名:80  武神诺手丶强者灌篮  1654排名:81  烟雨丶陈年剑圣  1646排名:82  娱加-辣么萌  1642排名:83  LCK备用1  1595排名:84  聆听-鑫哥卡萨丁  1582排名:85  雨雾-火鸡兰博  1571排名:86  老唐家糯米饭  1570排名:87  正恒丶逗比空  1552排名:88  拔哥丶卡特  1540排名:89  菲菲  1532排名:90  辗转辗转辗转  1517排名:91  虎牙鱼王-洛水尘  1505排名:92  国服第一卡特  1495排名:93  极限哥  1477排名:94  Huya丶风男  1431排名:95  王吉吉先生  1424排名:96  小风手速亚索  1402排名:97  魔魅大少  1401排名:98  LCK备用2  1396排名:99  虎牙嗨少  1371排名:100  北北  1365排名:101  坑货的提莫  1346排名:102  正恒丶烧肉粽  1320排名:103  甲第-乔仪  1298排名:104  提百万  1297排名:105  十四剑姬  1277排名:106  正恒丶啤梨  1241排名:107  我是钟钟  1166排名:108  天天天  1121排名:109  RiotGame1  1109排名:110  兆辉-章鱼哥  1090排名:111  河蟹i  1090排名:112  京酱Rose  1063排名:113  零一c  1063排名:114  冷三指  1059排名:115  喵喵  1058排名:116  腾嘉-陈小艾  1026排名:117  虎牙野区剑圣皓児  1006排名:118  小姚姚  1001排名:119  虎牙丶Hope  991

    你可能感兴趣的:(虎牙爬虫练习2019-07-10)