200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 爬取斗鱼LOL主播人气数据 并显示排行榜 [网络爬虫] [应用案例][请求头][模块]

爬取斗鱼LOL主播人气数据 并显示排行榜 [网络爬虫] [应用案例][请求头][模块]

时间:2021-05-16 01:27:54

相关推荐

爬取斗鱼LOL主播人气数据 并显示排行榜 [网络爬虫] [应用案例][请求头][模块]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。

本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

文章目录

1 爬取斗鱼LOL主播人气数据的思路2 构建请求头2.1 构建请求头概述(为什么要构建请求头?)2.1 构建固定请求头(单个`User-Agent`)2.2 构建随机请求头(多个`User-Agent`)3 所用到的其他模块简介3.1 requests 模块3.2 re 模块3.3 random 模块4 爬取斗鱼LOL主播人气数据,并显示排行榜【友情链接】微信公众号:码农阿杰博客园【参考资料】[Python 官网](/)[Python 3.8.2 documentation](/release/3.8.2/)

1 爬取斗鱼LOL主播人气数据的思路

(1)分析网页结构,url 调度

(2)网页下载

(3)数据抓取

(4)数据精炼

(5)业务处理

(6)数据存储(演示为控制台展示数据)

2 构建请求头

2.1 构建请求头概述(为什么要构建请求头?)

有的网站会有反爬虫措施,一般就是针对于headers中的User-Agent( User-Agent 头域的内容包含发出请求的用户信息。)的内容做一判断。

如果没有headers,往往会被认为是爬虫脚本,必然会拒绝这样的网络请求,甚至封掉ip地址。

所以,就需要将爬虫伪装成浏览器的正常访问,来避免一些反爬虫措施。

本文推荐一个稍微不错的方法:通过User-Agent构建请求头headers来伪装爬虫,在每次提交网络请求时,使用构建好的请求头去迷惑对方。

2.1 构建固定请求头(单个User-Agent

虽然是一个“笨办法”,但是也能解决一下燃眉之急。如果时间充足,甚至还可以多找一些User-Agent,再写个随机函数,每次用不同的User-Agent,也是可以的。

构建一个User-Agent的步骤,如下所示(演示用的是谷歌浏览器):

(1)点开任意的网址(演示用的是),按下f12键,也就是打开开发者工具。如下图所示:

(2)在上图中有Network选项,选中之后,按下F5,则会看到Name列表。如下图所示:

(3)点击Name列表里任意的一条内容(演示点击的是第一条内容),如下所示:

(4)会显示出很多内容,主要有如下所示:

General:指的是通用头域,或叫做通用首部。包含了请求和响应都支持的头域,提供了一些与报文相关的最基本的信息Response Headers:响应头域,或叫响应头。包含响应报文,当收到get或post等方法发来的请求后,服务器就要对报文进行响应。Request Headers:请求头域,或叫做请求头。包含请求报文,HTTP协议使用TCP协议进行传输,在应用层协议发起交互之前,首先是TCP的三次握手。完成了TCP三次握手后,用户会向服务器发出一个请求报文。

演示拿Accept-EncodingUser-Agent即可,如上图所示。

Accept-Encoding:浏览器能够进行解码的数据编码方式。User-Agent:浏览器类型。告诉HTTP服务器客户端浏览器使用的操作系统和浏览器的版本和名称。

(5)拿到一个User-Agent,保存到字典中备用。

header = {'Accept-Encoding': 'gzip, deflate, br', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}

2.2 构建随机请求头(多个User-Agent

第三方fake_useragent库(假用户代理库),对User-Agent提供了很好的支持,就不用辛辛苦苦一个一个去收集User-Agent了。

首先我们要从fake_useragent库中导入UserAgent,然后通过random就可以拿到随机的UserAgent

详细用法请参见 fake_useragent 官网地址:

/project/fake-useragent/

如果安装过fake_useragent,可用以下命令查看和图示如下:

pip list

如果没有安装,首先下载安装fake_useragent库,命令和图示如下:

pip install fake_useragent

安装好fake_useragent库之后,我们就可以使用喽!如下代码所示:

from fake_useragent import UserAgentfor i in range(10):print(UserAgent().random) # 用 print() 函数打印生成的 10 个随机 User-Agent

运行结果:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423FMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36

可以保存到字典里备用,随机请求头就构建好了,如下代码所示:

header = {'Accept-Encoding': 'gzip, deflate, br','User-Agent': str(UserAgent().random)}

3 所用到的其他模块简介

3.1 requests 模块

requests可以模拟浏览器的请求,比起urllibrequests模块的api更加便捷。

详细用法请参见 官方文档。

3.2 re 模块

re模块提供了一系列功能强大的正则表达式(regular expression)工具,它们允许你快速检查给定字符串是否与给定的模式匹配(match函数), 或者包含这个模式(search函数)。正则表达式是以紧凑的语法写出的字符串模式。

详细用法请参见 Python 标准库 re 模块介绍。

3.3 random 模块

该模块实现了各种分布的伪随机数生成器。

详细用法请参见 Python 标准库 random 模块介绍。

4 爬取斗鱼LOL主播人气数据,并显示排行榜

代码如下所示:

from fake_useragent import UserAgentimport requestsimport reimport randomclass Spider:# 目标页面地址url = '/g_LOL'# url = '/g_DOTA2'# 正则表达式# root_pattern = r'</div><div class="DyListCover-info">([\s\S]*?)</div>' 用这个root_pattern,在 __analysis()方法中就要用 root_html = re.findall(Spider.root_pattern, htmls)root_pattern = '<div class="DyListCover-info">([\d\D]*?)</div>'name_pattern = '</use></svg>([\d\D]{0,20}?)</h2>'number_pattern = '</use></svg>([\d\D]*?)</span>'# 构建随机请求头,伪装成浏览器header = {'Accept-Encoding': 'gzip, deflate, br', 'User-Agent': str(UserAgent().random)}# 抓取 HTMLdef __fetch_content(self):htmls = requests.get(Spider.url, headers=Spider.header).textreturn htmls# 数据分析def __analysis(self, htmls):# root_html = re.findall(Spider.root_pattern, htmls)root_html = re.findall(Spider.root_pattern, htmls)[1::2]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):lamb = lambda anchor: {'name': anchor['name'][0].strip(),'number': anchor['number'][0].strip()}anchors_refine = list(map(lamb, anchors))return anchors_refine# 业务处理def __sort(self, anchors):shuffle_list = list(range(len(anchors)))random.shuffle(shuffle_list)anchors_shuffle = [anchors[i] for i in shuffle_list]anchors = sorted(anchors_shuffle, key=self.__sort_seed, reverse=True)return anchors# 为 sorted() 函数的 key 参数提供总调用函数def __sort_seed(self, anchor):r = re.findall('\d*', anchor['number'])number = float(r[0])if '万' in anchor['number']:number *= 10000return number# 控制台展示数据def __show(self, anchors):for i, anchor in enumerate(anchors):# open(str(i)+'.excel')print('rank', i + 1, anchor['name'], anchor['number'])# 程序入口方法def go(self):htmls = self.__fetch_content() # 调用 __fetch_content() 方法获取 HTMLanchors = self.__analysis(htmls)anchors = self.__refine(anchors)anchors = self.__sort(anchors)self.__show(anchors)spider = Spider() # 创建 Spider 对象spider.go() # 调用 Spider 对象中的程序入口方法

运行结果:

rank 1 智勋勋勋勋 329.9万rank 2 T1直播faker 256.5万rank 3 东北大鹌鹑 242.8万rank 4 南波儿大魔王丶 185.9万rank 5 英雄联盟赛事 169.9万rank 6 夏天夏天丶丶 147.7万rank 7 洞主丨歌神洞庭湖 134.5万rank 8 杰克螳螂 124.1万rank 9 不2不叫周淑怡 114.9万rank 10 王纪超666 107.6万rank 11 最强皇童王丽农 87.3万rank 12 狐狸酱大魔王 80.6万rank 13 她打了个嗝儿 79.1万rank 14 梨落秋溪 77.7万rank 15 放逐大帝灬 71.9万rank 16 叶音符 67.4万rank 17 草莓 62.1万rank 18 zzc啊哦额 60.3万rank 19 余霜Yscandice 41.3万rank 20 石页的第一根矛s 40.6万rank 21 狗康Bfate丶 40.3万rank 22 远古解说YD 39.1万rank 23 女战士丶姝玥 38.7万rank 24 辛巴imb丶丶 37.9万rank 25 英雄联盟经典赛事点播 34.9万rank 26 暗夜猎手光头强 30.4万rank 27 格局太小OoO 29.1万rank 28 魔獸后裔 29.5万rank 29 初恋女孩水水 29.7万rank 30 PeanutHulllll 29.3万rank 31 Mouse光酱 28.3万rank 32 小熊和你 25.3万rank 33 小老板丶艾克 24.2万rank 34 波比丶Easyboom 23.4万rank 35 冰凡 22.7万rank 36 捕捉一只三吃 22.1万rank 37 咸鱼光y 22.6万rank 38 小微笑LMQ 21.4万rank 39 小蝌蚪羊月 21.1万rank 40 李冉冉i 20.9万rank 41 空大的劫zz 20万rank 42 孤儿南 19.8万rank 43 一只蘇l 19.8万rank 44 SNSofM 19.7万rank 45 SNSwordart 18.4万rank 46 祈风1v9 18.5万rank 47 柠檬少女吖 17.1万rank 48 会旋转的冬瓜 17.5万rank 49 作作金克丝 17.5万rank 50 消逝carry 17.3万rank 51 一只小媚媚丶 17.1万rank 52 杨驴驴y 16.2万rank 53 解说鼓鼓 16.7万rank 54 大象ouo 16.4万rank 55 刀锋秀秀AQA 16.9万rank 56 炽天使z1丶丶 16.5万rank 57 T1直播Cuzz 16.6万rank 58 岁月刀妹QAQ 16.2万rank 59 解说娃娃 15.4万rank 60 懒猫猫QAQ 15.9万rank 61 陛哥丶 15.5万rank 62 小埃及热狗OB 15.8万rank 63 SNAngelz 15.4万rank 64 馒头超仙女哒 15.3万rank 65 蟹老板丶西内 14.9万rank 66 凉风亚索yasuo 14.6万rank 67 陆屿爱吃鱼 14.4万rank 68 暴风工作室丶 14.7万rank 69 电竞少女萱某人OB 13.7万rank 70 宋暖阳绝不咕咕 13.6万rank 71 谭无双 13.6万rank 72 SNWeiwei 13.2万rank 73 T1直播Effort 13.2万rank 74 馒头OB解说 12.4万rank 75 SNBiubiu 12.1万rank 76 解说王多多 12.6万rank 77 Dy丶小然 12.3万rank 78 青蛙OB王者局丶抽红包 12.2万rank 79 川美人 12.7万rank 80 T1直播Roach 12.1万rank 81 LCK瓜皮OB飞科 12.1万rank 82 柚子ob 12.9万rank 83 迷离之道丶 12万rank 84 RNG上校OB皇族RYL不放弃 12.9万rank 85 王豆荳 12.6万rank 86 LDL官方直播间 12.1万rank 87 付小翁 11.1万rank 88 最初的可可 11.3万rank 89 安酱qwq 11.1万rank 90 狮狮嗷 11.1万rank 91 BiG热狗OB专属宝蓝阿水 11.6万rank 92 米可小甜甜 11.2万rank 93 解说奶弟 11.8万rank 94 安妮今天五杀了吗 11.9万rank 95 奶妈的安眠药 10.9万rank 96 诗俞 10.5万rank 97 Akl托尼老师 10.9万rank 98 泽元元元元 10.8万rank 99 鲍鲍解说 10.1万rank 100 雨神等你萌 10.8万rank 101 FPX小凤凰OB 10.8万rank 102 秋月小黑 10.6万rank 103 EDG救心丸OB 10.7万rank 104 教练JoKer 10.7万rank 105 熙子小盆友 10.1万rank 106 南方菇凉禾禾 10.4万rank 107 T1直播Ellim 10.2万rank 108 波波卡特0411 10.2万rank 109 i陈一一 9.7万rank 110 JY长腿仙儿 9.6万rank 111 yomi不是吸血鬼 9.1万rank 112 狼神丶欧阳 9.4万rank 113 熬夜的au 9.4万rank 114 我就是鱼鱼阿i 9.9万rank 115 douyu丶松子 9.5万rank 116 天神男枪 9.7万rank 117 熙酱鸭ovo 9.3万rank 118 小机灵鬼阿婉 9.4万rank 119 一小叶子吖 9.4万rank 120 SKlaus丶 1.2万

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Python 官网

Python 3.8.2 documentation

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。