爬取123粉丝网明星数据榜单,看看你的爱豆现在排名变化情况

发布时间:2025-05-13 19:23

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以下文章来源于云 + 社区,作者 深雾

转载地址

https://blog.csdn.net/fei347795790?t=1

前言

想关注你的爱豆最近在娱乐圈发展的怎么样吗?本文和你一起爬取娱乐圈的排行榜数据,来看看你的爱豆现在排名变化情况,有几次登顶,几次进了前十名呀。

一、网站原始信息

我们先来看下原始的网站页面

如果我们想一个一个复制这些数据,再进行分析,估计要花一天的时间,才可以把明星的各期排行数据处理好。估计会处理到崩溃,还有可能会因为人为原因出错。

而用爬虫,半个小时不到就可以处理好这些数据。接下来看看怎么把这些数据用 Python 爬下来吧。

二、先来看下爬取后数据的部分截图

1 男明星人气榜数据

2 女明星人气榜数据

三、如何获取 123 粉丝网的爬虫信息

以下是获取代码用到信息的具体步骤:

step1:浏览器 (一般用火狐和 Google 我用的 360) 中打开 123 粉丝网 step2:按键盘 F12 -> ctrl+r step3: 点击 results.php -> 到 Headers 中找到代码所需的参数

四、分步爬虫代码解析

1 用 Python 中的 Requests 库获取网页信息

#爬取当前页信息,并用BeautifulSoup解析成标准格式 import requests #导入requests模块 import bs4 url = "https://123fans.cn/lastresults.php?c=1" headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'Request Method':'Get'} req = requests.get(url, timeout=30, headers=headers) soup = bs4.BeautifulSoup(req.text, "html.parser")

代码解析:

url = :待爬取网页的 url 链接,相当于指定爬取评论的路径,本文对应填入上文 step3 中标注的 Requests URL 值。

headers = :待爬取网页的首部信息,把上文 step3 中标注的 Headers 中关键词后面的内容对应填入即可。

req =:用 get 方法获取待爬网页的所有信息。

soup:用 BeautifulSoup 把爬取内容解析成标准格式,方便数据处理。

注 1:有些网站访问时必须带有浏览器等信息,如果不传入 headers 就会报错,所以本例中加入了头部的一些信息。我试了一下该链接不加首部信息也可以正常运行,和加了首部信息得到的结果完全一致。

注 2:如果对 Requests 库不了解,可以参见本公众号中文章【Python】【爬虫】Requests 库详解

2 把爬取到的数据整合到一个数据框中

#把爬取的数据整合到数据框中 import re #正则表达式库 import numpy as np import pandas as pd period_data = pd.DataFrame(np.zeros((400,5))) #构造400行5列的全0矩阵备用 period_data.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank'] #给0矩阵列命名 #把当期的数据填入表格中 #姓名信息 i = 0 name = soup.findAll("td", {"class":"name"}) for each in name: period_data['name'][i]=each.a.text #依次加入姓名 i += 1 #人气信息 j = 0 popularity = soup.findAll("td", {"class":"ballot"}) for each in popularity: period_data['popularity_value'][j]=float(each.text.replace(",",'')) #依次加入人气值 j += 1 #期数信息 period_num = int(re.findall('[0-9]+', str(soup.h2.text))[0]) period_data['period_num'] = period_num #截止日期 end_time_0 = str(re.findall('结束日期.+[0-9]+', str(soup.findAll("div", {"class":"results"})))).split('.') end_time = '' for str_1 in end_time_0: end_time = end_time + re.findall('[0-9]+',str_1)[0] period_data['end_time'] = end_time #有序数,方便截取前多少位 period_data_1 = period_data.sort_values(by='popularity_value',ascending=False) period_data_1['rank'] = range(period_data_1.shape[0])

代码解析:

period_data:构造 400 行 5 列的矩阵用来存放每一期排行数据 (前几期排行榜存放了前 341 位明星的人气值,我怕往期的会多一点数据,所以取了 400 行)。

period_data.columns:给数据加一个列名。

name:用 findAll 函数取出所有的名字信息。

for each in name:用循环把名字信息存放到 period_data 中。

popularity:用 findAll 函数取出所有的人气值信息。

for each in popularity:用循环把人气信息存放到 period_data 中。

period_num:获取期数信息。

end_time:获取截止日期。

period_data_1 ['rank']:在最后一列加入有序数,方便数据截取使用。

接下来展示批量爬虫代码

五、批量爬虫代码解析

1 定义爬虫函数

import requests #导入requests模块 import bs4 import re #正则表达式库 import numpy as np import pandas as pd import warnings import time import random warnings.filterwarnings('ignore') #忽视ignore #headers的内容在Headers里面都可以找到 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'Request Method':'Get'} def crawler(url): req = requests.get(url, timeout=30, headers=headers) # 获取网页信息 soup = bs4.BeautifulSoup(req.text, "html.parser") #用soup库解析 period_data = pd.DataFrame(np.zeros((400,5))) #构造400行5列的全0矩阵备用 period_data.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank'] #给0矩阵列命名 #把当期的数据填入表格中 #姓名信息 i = 0 name = soup.findAll("td", {"class":"name"}) for each in name: period_data['name'][i]=each.a.text #依次加入姓名 i += 1 #人气信息 j = 0 popularity = soup.findAll("td", {"class":"ballot"}) for each in popularity: period_data['popularity_value'][j]=float(each.text.replace(",",'')) #依次加入人气值 j += 1 #期数信息 period_num = int(re.findall('[0-9]+', str(soup.h2.text))[0]) period_data['period_num'] = period_num #截止日期 end_time_0 = str(re.findall('结束日期.+[0-9]+', str(soup.findAll("div", {"class":"results"})))).split('.') end_time = '' for str_1 in end_time_0: end_time = end_time + re.findall('[0-9]+',str_1)[0] period_data['end_time'] = end_time #有序数,方便截取前多少位 period_data_1 = period_data.sort_values(by='popularity_value',ascending=False) period_data_1['rank'] = range(period_data_1.shape[0]) return period_data_1

本段代码是把分段爬虫代码整合到一个函数中,方便反复调用。

2 反复调用函数实现批量爬虫

period_data_final = pd.DataFrame(np.zeros((1,5))) #构造400行5列的全0矩阵备用 period_data_final.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank'] #给0矩阵列命名 for qi in range(538,499,-1): print("目前爬到了第",qi,'期') if qi == 538: url="https://123fans.cn/lastresults.php?c=1" else: url="https://123fans.cn/results.php?qi={}&c=1".format(qi) time.sleep(random.uniform(1, 2)) date = crawler(url) period_data_final = period_data_final.append(date) period_data_final_1 = period_data_fina.loc[1:,:] #去掉第一行无用数据

本段代码是反复调用爬虫函数获取页面数据,并用 append 整合到一个数据框中。

本文分享 CSDN - 松鼠爱吃饼干。
如有侵权,请联系 [email protected] 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享

网址:爬取123粉丝网明星数据榜单,看看你的爱豆现在排名变化情况 https://m.mxgxt.com/news/view/1171635

相关内容

数据至上年代,粉丝狂热打榜,刷数据已成产业,但明星榜单含金量究竟有几何?
新鲜出炉的明星热度榜单,前三名妥妥的,看看你的爱豆上榜了没?
取消明星艺人榜单之后舆论信息变化情况分析
FUNJI艺人全网数据排名查看软件免费下载
爱豆趋势怎么看数据分析
中央网信办:取消明星艺人榜单 不得诱导粉丝消费
活跃粉丝数排行榜,肖战排名在意料之中,赵丽颖排名在意料之外
怎么看数据分析粉丝量排名
123粉丝网,明星与粉丝互动的专属社交新阵地
“追星又变简单了”,一个打榜互撕粉丝的生活之变——中国青年网

随便看看