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

PS:在下一篇文章中分析排行榜的动态变化趋势,并绘制成动态条形图和折线图。

  

一、网站原始信息

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

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

  而用爬虫,半个小时不到就可以处理好这些数据。接下来看看怎么把这些数据用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 = 0popularity = 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整合到一个数据框中。

注1: print是为了展示爬取到第几期了。
注2:url中用了.format是为了控制跳转页面。
注3:time.sleep中用了随机数,是人为休眠一段不定长时间为了防止反爬虫。

  本文是本人使用Python库进行爬虫的非商业行为,如有问题,请指正。如果想获取文中所有可直接执行的代码和数据,可在公众号中回复"爬取娱乐圈排行榜数据",即可免费获取。如对代码有疑问,可以到公众号中私信我。

你可能感兴趣:
孤立森林
风控建模整体流程
用Python绘制皮卡丘
用Python绘制词云图
Python入门干货经验(免费提供资料)
用Python绘制杨紫作品集动态二维码
【Python】【爬虫】Requests库详解

长按(扫一扫)识别上方二维码学习更多Python和建模知识

【Python爬虫】用Python爬取娱乐圈排行榜数据相关推荐

  1. python爬虫实例之爬取智联招聘数据

    这是作者的处女作,轻点喷.... 实习在公司时领导要求学习python,python的爬虫作为入门来说是十分友好的,话不多说,开始进入正题. 主要是爬去智联的岗位信息进行对比分析出java和pytho ...

  2. python爬虫篇1——爬取中英文论文文献数据

    程序运行截图: mysql代码: CREATE TABLE `article` (`id` int(11) NOT NULL,`article_time` varchar(50) DEFAULT NU ...

  3. Python爬虫实战:爬取steam打折优惠数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于云+社区,作者 Elapse 转载地址 https://bl ...

  4. 基于Requests的Python爬虫入门实例------爬取豆瓣图书排行榜的前25本图书(小白福利)

    话不多说,先上代码: # -*- coding:utf-8 -*- import sys import requests import lxml from bs4 import BeautifulSo ...

  5. 超实用的爬虫利器selenium 爬取豆瓣喜剧电影排行榜数据

    话不多说上代码 这里依然选择的是反爬最少对新手友好的豆瓣小可爱 之前的招聘网站反爬都tui厉害... selenium库和chromedriver 的环境变量问题网上都有很多教程这里不再赘述 唯一需要 ...

  6. Python爬虫实战:爬取全站小说排行榜

    喜欢看小说的骚年们都知道,总是有一些小说让人耳目一新,不管是仙侠还是玄幻,前面更了几十章就成功圈了一大波粉丝,成功攀上飙升榜,热门榜等各种榜,扔几个栗子出来:

  7. python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程

    python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程 前言 一丶整体思路 二丶遇到的问题 三丶分析URL 四丶解析页面 五丶写入文件 六丶完整代码 七丶最后 前言 大家好我是墨绿 头顶总 ...

  8. python 爬虫实例 电影-Python爬虫教程-17-ajax爬取实例(豆瓣电影)

    Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...

  9. Python爬虫系列之爬取微信公众号新闻数据

    Python爬虫系列之爬取微信公众号新闻数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流 ...

最新文章

  1. 在ubuntu16安装supervisor 并 启动 .net core.
  2. Windows下用VS2013加载caffemodel做图像分类
  3. 2029. 石子游戏 IX
  4. iOS5中 UIViewController新方法的使用
  5. 下载丨Linux+Oracle 11g+RAC+12cc+adg国内业界最详细生产系统下实施文档
  6. (转) RabbitMQ学习之发布/订阅(java)
  7. SAP BC430 课程中文自学笔记
  8. 后端-SpringBoot MySql 连接语句
  9. linux的shell命令
  10. 回车键为什么叫做回车键?
  11. 【菜鸟进阶之路】P6367 [COCI2006-2007#6] PRASE - 洛谷
  12. NKOI 3590 循环赛日程表
  13. 忆阻器交叉开关阵列中的长短期记忆(LSTM)神经网络
  14. 【saltstack】配置salt-master端REDIS_RETURN
  15. maven配置本地仓库
  16. Windows 11 蓝牙耳机音质故障-解决方法
  17. 一键搭建asp php mysql_一键快速搭建Apache+PHP+MySQL+ASP平台(二)
  18. matlab小点轨迹仿真,无碳小车Matlab轨迹仿真及路径图
  19. 写了三百篇算法题解,关于如何刷题有些话我想对你说
  20. Ue4 offline installation steps 虚幻4游戏引擎离线安装

热门文章

  1. catia如何整列加工_CATIA机械加工工艺教程
  2. ping 不通。无法访问目标主机
  3. some 和 every的区别和用法
  4. Android之动画全讲-刘志远-专题视频课程
  5. C 定义了 7 种变量类别 静态变量 实例变量 数组元素 值参数 引用参数 输出参数和局部变量
  6. vue页面中el-carousel轮播页面或图片
  7. 2022年危险化学品生产单位安全生产管理人员免费试题及危险化学品生产单位安全生产管理人员考试技巧
  8. 计算机弹奏致爱数字,华为电脑——我的至爱
  9. Hololens远程视频通话与AR标注
  10. 2018年区块链革命性项目VRBT是一种什么样的技术架构?