爬取虎牙直播的直播间名称以及对应的人数

发布时间 2023-04-25 20:15:09作者: ᕙ(´-‸-`)ᕗ

首先获得数据定位   按F12打开控制台,点击左上角抓取其中一个直播间的主播名称,观看人数同样操作

为了使得到的数据名称与观看人数对应,找到最近的闭合标签,图片中最上面的使闭合标签,第一行是主播名称,第二行是直播间观看人数。

标签选择执行“就近原则”

 

爬取内容结构如下

 实现爬取直播间名称和人数的代码实现如下

 1 import re
 2 from urllib import request
 3 
 4 class Spider():
 5     url="https://www.huya.com/g/lol"
 6     #正则表达式   匹配内容,爬取的内容
 7     root_pattern ='<div class ="txt">([\s\S]*?)</div>'
 8     #root_pattern ='<div class ="txt">[\s\S]*?</div>'  *可以读取多个字符   ?选择非贪婪模式  ()只选择前面标签里面的信息
 9     #匹配的方式
10     #\w 单词字符 \W
11     #\s 空白字符\W
12     #. 匹配除换行符\n之外其他所有字符
13     name_pattern ='</i>([\s\S]*?)</span>'
14     number_pattern='<span class="num">[\s\S]*?)</span>'
15     def __fetch_content(self):
16         r= request.urlopen(Spider.url)
17         htmls = r.read()
18         htmls =str(htmls,encoding='utf-8')
19         return htmls
20     def __analysis(self, htmls):
21         root_html = re.findall(Spider.root_pattern,htmls)
22         anchors=[]
23         for htlm in root_html:
24             name = re.findall(Spider.name_pattern,html)
25             number = re.findall(Spider.number_pattern,html)
26             anchor ={'name':name,'number':number}
27             anchors.append(anchor)
28         return anchors
29     #已经获得数据,精炼数据,规范结构
30     def __refine(self,anchors):
31         l = lambda  anchor:{
32             'name':anchor['name'][0].strip(),
33             'number':anchor['number'][0]
34             }
35         return map(l,anchors)
36         #strip 去除空格python内置函数
37     def __sort(self,anchors):
38         anchors =sorted(anchors,key=self.__sort_seed(),reverse=True)
39         return anchors
40 
41     def __sort_seed(self,anchor):
42         r=re.findall('\d*',anchor['number'])
43         # 加 * 是多个 相当于 *n
44         number = float(r[0])
45         if '' in anchor['number']:
46             number *=10000
47         return anchor['number']
48 
49     def _show(self,anchors):
50         for rank  in range(0,len(anchors)):
51             print('rank ' + str(rank + 1)+ ':'+ anchors[rank]['name'] + '     '+ anchors[rank]['number'])
52 
53     def go(self):
54         htmls =self.__fetch_content()
55         anchors=self.__fetch_content()
56         anchors=list(self.__refine(anchors))
57         anchors =self.__sort(anchors)
58         self.__show(anchors)
59 
60 
61 
62 spider =Spider()
63 spider.go()

参考视频