python如何爬取123粉丝网明星数据榜单

发布时间:2025-05-18 20:24

发布时间:2022-01-13 15:49:44 阅读:189 作者:小新 栏目:大数据

Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章给大家分享的是有关python如何爬取123粉丝网明星数据榜单的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、网站原始信息

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

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

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

python如何爬取123粉丝网明星数据榜单

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

1 男明星人气榜数据

python如何爬取123粉丝网明星数据榜单

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

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

step1:浏览器(一般用火狐和Google我用的360)中打开123粉丝网

step2:按键盘F12 -> ctrl+r

step3: 点击results.php -> 到Headers中找到代码所需的参数

四、分步爬虫代码解析

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

import 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)))   period_data.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank']   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.h3.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   import bs4 import re         import numpy as np    import pandas as pd import warnings import time import random warnings.filterwarnings('ignore')   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")       period_data = pd.DataFrame(np.zeros((400,5)))       period_data.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank']                 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.h3.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)))   period_data_final.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank']   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整合到一个数据框中。

感谢各位的阅读!关于“python如何爬取123粉丝网明星数据榜单”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

网址:python如何爬取123粉丝网明星数据榜单 http://c.mxgxt.com/news/view/1268370

相关内容

爬取123粉丝网明星数据榜单,看看你的爱豆现在排名变化情况
Python 爬虫实战:在微博爬取明星动态,挖掘粉丝互动热度
python如何增加明星曝光 – PingCode
Python编程实现Taylor Swift粉丝数据分析与可视化工具
Python爬虫实现:追踪Taylor Swift抖音账号的首位粉丝动态
java 实现抖音主播粉丝数据分析 粉丝数据分析功能
比速度,Python爬虫还是八爪鱼?测评两款网络爬虫工具
python爬虫实战(五) 爬取微博明星粉丝基本信息+可视化
八爪鱼和python爬虫哪个好
探索Taylor Swift粉丝数据:Python数据分析与可视化实战

随便看看