1.明确爬虫目的

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

2.怎么来爬?

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

<li class="game-live-item" gid="1">
<a href="http://www.huya.com/baozha" class="video-info new-clickstat " target="_blank" report="{&quot;eid&quot;:&quot;click/position&quot;,&quot;position&quot;:&quot;lol/0/1/1&quot;,&quot;game_id&quot;:&quot;1&quot;,&quot;ayyuid&quot;:&quot;17363578&quot;}">
<img class="pic" data-original="//screenshot.msstatic.com/yysnapshot/1801cfa4fc99aabc841eb9e25fa43f15a608b02d1055?imageview/4/0/w/338/h/190/blur/1" src="//screenshot.msstatic.com/yysnapshot/1801cfa4fc99aabc841eb9e25fa43f15a608b02d1055?imageview/4/0/w/338/h/190/blur/1/format/webp" onerror="this.onerror=null; this.src='//a.msstatic.com/huya/main/assets/img/default/338x190.jpg';" alt="炸姐ADC的直播" title="炸姐ADC的直播">
<em class="tag tag-recommend">大神推荐</em> <div class="item-mask"></div>
<i class="btn-link__hover_i"></i>
<p class="tag-right">
<!-- 蓝光 -->
<!-- 热舞 -->
<!-- 存活人数 -->
</p>
</a>
<a href="http://www.huya.com/baozha" class="title new-clickstat" report="{&quot;eid&quot;:&quot;click/position&quot;,&quot;position&quot;:&quot;lol/0/1/1&quot;,&quot;game_id&quot;:&quot;1&quot;,&quot;ayyuid&quot;:&quot;17363578&quot;}" title="S8定位赛开始了11-0 裁决已解决" target="_blank">S8定位赛开始了11-0 裁决已解决</a>
<span class="txt">
<span class="avatar fl">
<img data-original="//huyaimg.msstatic.com/avatar/1095/83/2aa2f6905fe4382221d08b66d7cdcb_180_135.jpg" src="//huyaimg.msstatic.com/avatar/1095/83/2aa2f6905fe4382221d08b66d7cdcb_180_135.jpg" onerror="this.onerror=null; this.src='//a.msstatic.com/huya/main/assets/img/default/84x84.jpg';" alt="炸姐ADC" title="炸姐ADC">
<i class="nick" title="炸姐ADC">炸姐ADC</i>
</span>
<span class="num"><i class="num-icon"></i><i class="js-num">67.0万</i></span>
</span>
</li>
开始的时候我选取的是<span class="txt"></span>,虽然这个标签中涵盖了我们需要的主播名字和主播的粉丝量,但是,如果我们用正则表达式提取的时候,如果使用贪婪模式的时候,提取的信息就比上面多太多了,如果用非贪婪模式的时候,
提取的内容也就只有下面这些:
<span class="txt">
<span class="avatar fl">
<img data-original="//huyaimg.msstatic.com/avatar/1095/83/2aa2f6905fe4382221d08b66d7cdcb_180_135.jpg" src="//huyaimg.msstatic.com/avatar/1095/83/2aa2f6905fe4382221d08b66d7cdcb_180_135.jpg" onerror="this.onerror=null; this.src='//a.msstatic.com/huya/main/assets/img/default/84x84.jpg';" alt="炸姐ADC" title="炸姐ADC">
<i class="nick" title="炸姐ADC">炸姐ADC</i>
</span>
缺失了主播的粉丝数,那么选取的标签就是不合理的。
如果我们选择<li class="game-live-item" gid="1"></li>这个标签的时候就不会出现问题的。

b. 尽量选取匹配的信息

假想一下,如果我们只是获得主播名字,然后再获取主播粉丝,那么信息就对不上了,所以我们要选取匹配的信息。选取下面的就很合理。
<li class="game-live-item" gid="1">
<a href="http://www.huya.com/baozha" class="video-info new-clickstat " target="_blank" report="{&quot;eid&quot;:&quot;click/position&quot;,&quot;position&quot;:&quot;lol/0/1/1&quot;,&quot;game_id&quot;:&quot;1&quot;,&quot;ayyuid&quot;:&quot;17363578&quot;}">
<img class="pic" data-original="//screenshot.msstatic.com/yysnapshot/1801cfa4fc99aabc841eb9e25fa43f15a608b02d1055?imageview/4/0/w/338/h/190/blur/1" src="//screenshot.msstatic.com/yysnapshot/1801cfa4fc99aabc841eb9e25fa43f15a608b02d1055?imageview/4/0/w/338/h/190/blur/1/format/webp" onerror="this.onerror=null; this.src='//a.msstatic.com/huya/main/assets/img/default/338x190.jpg';" alt="炸姐ADC的直播" title="炸姐ADC的直播">
<em class="tag tag-recommend">大神推荐</em> <div class="item-mask"></div>
<i class="btn-link__hover_i"></i>
<p class="tag-right">
<!-- 蓝光 -->
<!-- 热舞 -->
<!-- 存活人数 -->
</p>
</a>
<a href="http://www.huya.com/baozha" class="title new-clickstat" report="{&quot;eid&quot;:&quot;click/position&quot;,&quot;position&quot;:&quot;lol/0/1/1&quot;,&quot;game_id&quot;:&quot;1&quot;,&quot;ayyuid&quot;:&quot;17363578&quot;}" title="S8定位赛开始了11-0 裁决已解决" target="_blank">S8定位赛开始了11-0 裁决已解决</a>
<span class="txt">
<span class="avatar fl">
<img data-original="//huyaimg.msstatic.com/avatar/1095/83/2aa2f6905fe4382221d08b66d7cdcb_180_135.jpg" src="//huyaimg.msstatic.com/avatar/1095/83/2aa2f6905fe4382221d08b66d7cdcb_180_135.jpg" onerror="this.onerror=null; this.src='//a.msstatic.com/huya/main/assets/img/default/84x84.jpg';" alt="炸姐ADC" title="炸姐ADC">
<i class="nick" title="炸姐ADC">炸姐ADC</i>
</span>
<span class="num"><i class="num-icon"></i><i class="js-num">67.0万</i></span>
</span>
</li>

c. 尽量选取他们的父级标签

3. 简单点的爬虫思路

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

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

4.开始爬

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

from urllib import request
import re class Spider():
url = 'http://www.huya.com/g/lol'
root_pattern = '<li class="game-live-item" gid="1">([\w\W]*?)</li>'
one_pattern = '<i class="nick" title="[\s\S]*?</i>'
two_pattern = '<i class="js-num">([\s\S]*?)</i>'
one_pattern_name = '>([\s\S]*?)</i>' #模拟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 = [] for r in 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 '万' in star_end_list['follwers']:
num=num*10000
return num #数据的后续处理(可以存入数据库)
def __show(self,star_end_lists_sorted):
print('------虎牙LOL主播粉丝的排行榜------')
for i in range(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

声明:以上数据是时间在2018.1.18.13:53统计的

5.爬虫有什么用

存到数据库中,就可以自己做小程序,或者其他的了。

转载请注明出处,谢谢!

记录一下自己爬虎牙LOL主播的爬虫思路的更多相关文章

  1. python爬虫--看看虎牙女主播中谁颜值最高

    目录 爬虫 百度人脸识别接口 效果演示 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知 ...

  2. 『Scrapy』爬取斗鱼主播头像

    分析目标 爬取的是斗鱼主播头像,示范使用的URL似乎是个移动接口(下文有提到),理由是网页主页属于动态页面,爬取难度陡升,当然爬取斗鱼主播头像这么恶趣味的事也不是我的兴趣...... 目标URL如下, ...

  3. 爬虫之selenium爬取斗鱼主播图片

    这是我GitHub上简单的selenium介绍与简单使用:https://github.com/bwyt/spider/tree/master/selenium%E5%9F%BA%E7%A1%80 & ...

  4. python实战之原生爬虫(爬取熊猫主播排行榜)

    """ this is a module,多行注释 """ import re from urllib import request # B ...

  5. selenium,webdriver爬取斗鱼主播信息 实操

    from selenium import webdriver import time from bs4 import BeautifulSoup class douyuSelenium(): #初始化 ...

  6. 虎牙数万主播同时在线直播的秘密,CDN推流日志上行实时监控

    6 月 10 日,又拍云 Open Talk | 2018 音视频技术沙龙·深圳站 顺利落幕,来自虎牙的直播运维研发架构师张波在沙龙上做了<基于CDN推流日志的主播上行实时监控及其自动化解密&g ...

  7. 爬虫之爬取斗鱼官网LOL部分主播的状态

    一个爬虫小程序 爬取主播的排名及观看人数 import re import requests import request class Spider(): url = 'https://www.dou ...

  8. 使用Python自带的库和正则表达式爬取熊猫直播主播观看人气

    主要是体现代码的规范性 from urllib import request import re class Spider(): url = 'https://www.panda.tv/cate/lo ...

  9. 鹅厂优文|主播pk,如何实现无缝切换?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文作者,rexchang(常青),腾讯视频云终端技术总监,2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手 ...

随机推荐

  1. springboot 热部署 idea版本(转)

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...

  2. 将java项目打包为jar

    打开Eclipse,点击file,选择export 选择java,选择其中的JAR file并点击next 选择需要的到处的项目,并在下方输入将项目保存为的目录,文件名字. 如果,已经将项目打包为一个 ...

  3. (五):C++分布式实时应用框架——支撑复杂的业务通讯关系

    C++分布式实时应用框架--支撑复杂的业务通讯关系 技术交流合作QQ群:436466587 欢迎讨论交流 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法 ...

  4. cocoapods安装说明,最快安装,以及使用

    安装卸载更新新推荐 文章最后 其他问题总结: 1 添加taobao提供的镜像地址:http://ruby.taobao.org/ 移除命令:gem sources --remove https://r ...

  5. .NET开发一个微信跳一跳辅助程序

    昨天微信更新了,出现了一个小游戏"跳一跳",玩了一下 赶紧还蛮有意思的 但纯粹是拼手感的,玩了好久,终于搞了个135分拿了个第一名,没想到过一会就被朋友刷下去了,最高的也就200来 ...

  6. [机器学习系列] k-近邻算法(K–nearest neighbors)

    C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...

  7. C语言应用程序的内存图

    1.综述 c语言应用程序加载到内存,这时它所占据的内存分为四个区,分别为栈Stack,堆Heap,静态存储区Static Area,代码存储区Code Area,这四个区分别放置应用程序的不同部分,从 ...

  8. 历年NOIP选题题解汇总

    联赛前上vijos板刷往年联赛题,使用在线编辑编写代码,祝我rp++. 废话不多说,挑比较有意思的记一下. 题目是按照年份排序的,最早只到了03年. 有些题目因为 我还没写/很早之前写的忘了 所以就没 ...

  9. bzoj 3571: [Hnoi2014]画框

    Description 小T准备在家里摆放几幅画,为此他买来了N幅画和N个画框.为了体现他的品味,小T希望能合理地搭配画与画框,使得其显得既不过于平庸也不太违和.对于第 幅画与第 个画框的配对,小T都 ...

  10. userdel 命令详解

    userdel  作用: 删除指定用户,以及用户相关的文件. 如不加选项,则仅删除用户账号,而不删除相关文件 选项: -f:强制删除用户,即时用户当前已登录 -r:删除用户的同时删除与用户相关的所有文 ...