记录一下自己爬虎牙LOL主播的爬虫思路
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="{"eid":"click/position","position":"lol/0/1/1","game_id":"1","ayyuid":"17363578"}"><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.οnerrοr=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="{"eid":"click/position","position":"lol/0/1/1","game_id":"1","ayyuid":"17363578"}" 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.οnerrοr=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.οnerrοr=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="{"eid":"click/position","position":"lol/0/1/1","game_id":"1","ayyuid":"17363578"}"><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.οnerrοr=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="{"eid":"click/position","position":"lol/0/1/1","game_id":"1","ayyuid":"17363578"}" 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.οnerrοr=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 reclass 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*10000return 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.爬虫有什么用
存到数据库中,就可以自己做小程序,或者其他的了。
转载请注明出处,谢谢!
转载于:https://www.cnblogs.com/huhu1203/p/8309826.html
记录一下自己爬虎牙LOL主播的爬虫思路相关推荐
- 爬虫技术python爬到女性语音_python爬虫看看虎牙女主播中谁最“顶”步骤详解
网页链接:https://www.huya.com/g/4079 这里的主要步骤其实还是和我们之前分析的一样,如下图所示: 这里再简单带大家看一下就行,重点是我们的第二部分. 既然网页结构我们已经分析 ...
- 爬取虎牙游戏主播人气分析实战
爬取虎牙游戏主播人气分析实战: 在写的时候遇得了几个坑,然后又填上了: 第一个是: 开头我想爬取主播人气:但是找不到 div 只找到 span 遇到下一个</span>就结束了 无奈只能找 ...
- Python爬取美女主播图片适合初学者
Python爬取虎牙女主播图片,非常适合初学者,代码少,思路清晰 开发环境Pycharm import time import requests from lxml import etree from ...
- 使用selenium,xpath,线程池爬取斗鱼主播信息
使用xpath,线程池爬取斗鱼主播信息: 主要爬取主播昵称,直播内容分类,房间名称,房间号以及人气,共爬取了大概110多页数据,大概15000条,保存在txt文本中, import timefrom ...
- python怎么爬虎牙_Python爬虫爬取虎牙数据!谁才是虎牙第一主播!
首先打开我们所需要爬取的网站,这里我们挑选的是虎牙直播. 我们今天所爬取的数据就是直播名,直播地址,直播的人,观看数以及直播的类别,如下图所示 第一步关于直播的类别,从第一张图片我们可以看到在右边有直 ...
- Python爬虫爬取虎牙数据!谁才是虎牙第一主播!
首先打开我们所需要爬取的网站,这里我们挑选的是虎牙直播. 我们今天所爬取的数据就是直播名,直播地址,直播的人,观看数以及直播的类别,如下图所示 第一步关于直播的类别,从第一张图片我们可以看到在右边有直 ...
- python爬取斗鱼主播图片
今天闲来无事,爬取一下斗鱼女主播的图片,之前学习scrapy的时候写过一个找不到了,今天使用requests和bs4重新写了一份,闲话不多说,直奔主题. 首先用Chrome浏览器访问斗鱼官网: 当然是 ...
- python爬取斗鱼主播图片_F_hawk189_新浪博客
今天闲来无事,爬取一下斗鱼女主播的图片,之前学习scrapy的时候写过一个找不到了,今天使用requests和bs4重新写了一份,闲话不多说,直奔主题. 首先用Chrome浏览器访问斗鱼官网: 当然是 ...
- 利用xpath爬取斗鱼主播热度和房间标题
import requests import pandas as pd from bs4 import BeautifulSoup import os import time import rando ...
最新文章
- 94页论文综述卷积神经网络:从基础技术到研究前景
- inspinia前端模板怎样编写消息提示框点击确定后的回调方法
- 计算机图形学在数学中的应用,计算机图形学的数学工具与C#实现:数学C
- c语言中判断输入是否为数字_C 判断
- Maven项目中使用JUnit进行单元测试
- 两天,我把分布式事务搞完了
- Web程序员如何入门以太坊开发
- iphone11返回上一级手势怎么设置_华为手机的这五种导航方式,你更习惯哪一种?怎么切换?...
- 『ORACLE』SPM(下)-baseline实验(11g)
- 计算机音乐谱魔法城堡,《魔法城堡》简谱 TFBOYS 乐谱 - 新芭网
- 根据代表性序列预测OTU/ASV生活史策略——寡营养型or富营养型
- UCB——上界置信算法
- Android RSA加密解密
- Java中哈希值是怎么算的
- 重装系统后电脑耳机插前面没有声音输出怎么办?
- linux boot引导修复工具,修复linux的grub2引导(单独/boot,lvm-root)
- NFA到DFA的转化
- reference_line_provider
- 【Python】glob.glob()函数解释
- 如何通过上传文件控制服务器,怎么给远程服务器上传文件
热门文章
- 修改Element-ui表格样式
- spark使用之ALS版本对比
- 如何将谷歌浏览器的插件下载到本地?
- ue4白天夜晚切换_白天/夜晚编码的美好时光...多年来最佳
- 记录个tomcat启动报错问题,Unable to process Jar entry
- android activity_main.xml,Android Studio 打开activity_main.xml不能正常显示
- 关于GIS的一些感悟·思考
- 基于python的植物大战僵尸游戏开发
- 代码块:在Java中,使用{}括起来的代码被称为代码块。
- zz 图像数据投影投影数据重建图像 radon