51CTO博主之星评选来临,橡皮擦首次进入前100,欢迎大家来投票。

51CTO 博主之星竞选人 梦想橡皮擦 申请票票票票~~~啦啦

第一步:打开 https://blog.51cto.com/blog-contest/index#part2
第二步:搜索 33
第三步:点击全部投给博主橡皮擦3票

希望未来我的博客能对大家有所帮助。

需求评审

本次的需求如下所示,官网提供的页面中,前100是随机出现的,无法获取大家的投票排名,基于此,爬虫的需求就诞生了
我们将通过 Python 爬虫获取页面投票数据,实现及时排名程序。

实现逻辑如下所示:

  1. 爬取所有用户数据
  2. 入库
  3. 展示

数据爬虫

首先查询API接口地址与数据,分别如下所示:

接口地址与规则

https://blog.51cto.com/blog-contest/get-blogger-list?listtype=3&page=1&type=0&keywords=
https://blog.51cto.com/blog-contest/get-blogger-list?listtype=3&page=2&type=0&keywords=
……
https://blog.51cto.com/blog-contest/get-blogger-list?listtype=3&page=7&type=0&keywords=

数据格式如下所示:

"status": 1,"msg": "获取成功","data": {"data": [{"id": "001","user_id": "3002256","user_name": "三杯水","poll": "5","domain": "https://blog.51cto.com/jerrymin","headUrl": "https://头像.jpg"},{"id": "002","user_id": "14797794","user_name": "江晓龙的技术博客","poll": "23","domain": "https://blog.51cto.com/jiangxl","headUrl": "https://头像"},

以上数据清理完毕之后,就可以编写相关源码

import requests
import timedef get_data(page, now):res = requests.get(f'https://blog.51cto.com/blog-contest/get-blogger-list?listtype=3&page={page}&type=0&keywords=')data = res.json()['data']['data']for item in data:id = item["id"]user_id = item["user_id"]user_name = item["user_name"]poll = item["poll"]domain = item["domain"]print(id, user_id, user_name, poll, domain)if __name__ == '__main__':now = int(time.time())for i in range(1, 8):get_data(i, now)

我们调用了一下对应的接口,并且传递对应参数到接口中,对返回的JSON进行了解析,其中额外增加了一个 JSON 参数,用于后续控制数据筛选范围。

建立表结构

在 MySQL 中创建一张如下格式的表格,用于存储采集到的数据,其中 time 字段仅获取到秒位。

表结构创建完毕,就可以运行我们的代码,然后插入结果数据了。

def insert_table(id, user_id, user_name, poll, domain, now):db = pymysql.connect(host='localhost',user='root',password='root',database='51cto_rank')cursor = db.cursor()sql = """insert into poll_table(id, user_id, user_name, poll, domain,time) values(%s,%s,%s,%s,%s,%s);"""try:cursor.execute(sql, (id, user_id, user_name, poll, domain, now))db.commit()except Exception as e:# print(content)print(e)db.rollback()

运行结果如下所示:

前台页面实现

下面就是最终步骤,用 Python Flask 框架实现数据的前台渲染,由于数据比较简单,直接使用 bootstrap 框架落地实现即可

Flask 框架的学习与使用,可以参考橡皮擦的其它博客,核心的代码如下所示:

# 导入Flask类
from flask import Flask
from flask import request
from flask import render_template
import pymysql# 实例化,可视为固定格式
app = Flask(__name__)def get_data():db = pymysql.connect(host='localhost',user='root',password='root',database='51cto_rank')cursor = db.cursor()sql = """select id, user_id, user_name, poll, domain, time from poll_table order by time desc LIMIT 100;"""try:# 执行SQL语句cursor.execute(sql)# 获取所有记录列表results = cursor.fetchall()return resultsexcept Exception as e:# print(content)print(e)# route()方法用于设定路由;
@app.route('/rank.html', methods=['GET'])
def hello_world():if request.method == 'GET':data = get_data()return render_template('rank.html', data=data)if __name__ == '__main__':# app.run(host, port, debug, options)# 默认值:host="127.0.0.1", port=5000, debug=Falseapp.run(host="0.0.0.0", port=5000)

其中 rank.html 页面如下所示,其中 bootstrap 建议使用 cdn 加速地址,这里我直接引用的官方地址

<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><title>51CTO博主之星排名</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"><script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head><body><table class="table"><tr><th>用户名</th><th>票数</th><th>个人主页</th></tr>{% for item in data %}<tr><td>{{item[2]}}</td><td>{{item[3]}}</td><td>{{item[4]}}</td></tr>{% endfor %}</table></body></html>

上述代码的排序存在一定问题,我们在按照票数进行一下倒序,代码如下:

select id, user_id, user_name, poll, domain,time from (
select id, user_id, user_name, poll, domain,time from poll_table order by time desc LIMIT 100 )
as f ORDER BY f.poll desc

除此之外,还可以根据序号,将数据进行分组,对应的就是上述 id 值。

  • 网络运维:1~30
  • 前后端开发:31~70
  • IT新技术:71~100

发布我们的程序

找一台闲置的服务器(广告位招商),部署 Python 代码,注意在云端安全组放开指定端口,这里我直接使用默认的 80 端口。

展示一下服务器端的模块配置

打开如下IP地址(没有绑定域名,因为域名没备案)

点击访问排名页面/rank.html

等你投票

51CTO博主之星评选来临,橡皮擦首次进入前100,欢迎大家来投票。

51CTO 博主之星竞选人 梦想橡皮擦 申请票票票票~~~啦啦

第一步:打开 https://blog.51cto.com/blog-contest/index#part2
第二步:搜索 33
第三步:点击全部投给博主橡皮擦3票

希望未来我的博客能对大家有所帮助。

记录时间

2022年度 Flag,写作的 588 / 1024 篇。
可以关注我,点赞我、评论我、收藏我啦。

更多精彩

  • Python 爬虫 100 例教程导航帖(连续 3 年,不断更!)
  • Python爬虫120 (39.9 元,保 5 年更新)

一个python爬虫工程师参加博主之星之后,必做的事情相关推荐

  1. python爬虫工程师考试科目一_一个Python爬虫工程师的修养

    练武不练功,到老一场空 练武的人都知道:练武不练功,到老一场空! 说的是只练花架子,不练习内功,最终也都是一个菜鸟级武师. 学习编程何尝不是!我时常见到已经学习相当一段时间的程序员,连稍微深点的基本知 ...

  2. 一个Python爬虫工程师学习养成记

    大数据的时代,网络爬虫已经成为了获取数据的一个重要手段. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道 ...

  3. python爬虫面试题-扣丁学堂解析Python爬虫工程师面试题汇总

    扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1629浏览 今天,扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧,希望给参加Python培训的同学一点 ...

  4. python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总

    扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天,扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧,希望给参加Python培训的同学一点 ...

  5. python爬虫工程师是什么级别_高级爬虫工程师能干什么 高级爬虫工程师有前途吗数...

    高级爬虫工程师有前途吗数据采集,数据清洗等等都是大数据分析,很屌很酷拽的好不好.大数据又是人工智方面的饲养员,天天打猪草,很辛苦的. 现在有很多软件在逐步替代爬虫工程师做的事,比如采集数据原先你得请一 ...

  6. python爬虫工程师-记录一下自己找“python爬虫工程师实习生”岗位的经历

    今天是2018年9月11号,是我实习的第二天,记录一下找工作的历程,本来准备昨晚写的,但是第一天来实习,有点累了,就早点睡了,早上醒了,洗漱一下就来写这篇文章了. 鄙人的水平很低,而且还是一名大四的学 ...

  7. python爬虫都能干什么用_5 行代码就能写一个 Python 爬虫

    欢迎关注我的公众号:第2大脑,或者博客:高级农民工,阅读体验更好. 摘要:5 行代码就能写一个 Python 爬虫. 如果你是比较早关注我的话,会发现我此前的大部分文章都是在写 Python 爬虫,前 ...

  8. 微专业python爬虫工程师_从零起步 系统入门Python爬虫工程师

    课程简介: 从零起步 系统入门Python爬虫工程师 大数据时代,python爬虫工程师人才猛增,本课程专为爬虫工程师打造,课程有四个阶段,爬虫0基础入门->项目实战->爬虫难点突破-&g ...

  9. python爬虫工程师-Python爬虫工程师

    课程概况 3个月精通Python爬虫工程师核心技能. 从入门到进阶,知识点全覆盖,配套实战练习. 包含课程 入门篇 Python编程环境配置及基础语法 掌握Python基础语法及虫技能,利用Pytho ...

最新文章

  1. oracle 查询重复数据并且删除, 只保留一条数据
  2. 【CVPR2022】语言引导与基于视觉的深度度量学习的集成
  3. 互联网协议第六版部署提速 阿里专家详解全套安全解决方案
  4. 用纯C面向过程写icefox3的代码
  5. 262K Color
  6. 怎样编写一个Photoshop滤镜(1)
  7. jquery 验证小数点后几位_(亲测可用)input只能输入数字或小数点后几位
  8. AI 算法起家的今日头条为何败给了色情?
  9. java判断字符串是否是空格_检查字符串在Java中是否为空格,空(“”)或null
  10. linux postgresql 恢复数据库,PostgreSQL数据库备份和恢复
  11. Atitit 程序设计概论 艾提拉著作 目录 1. 界面ui设计 1 2. 编程语言部分 1 3. 面向对象的程序设计 1 4. 算法章节 数据结构 1 5. 第21章 标准库 2 5.1. 文件i
  12. 【Pygame实战】怀旧经典—这款给娃的棋类游戏,你还记得叫什么吧?(一定要收藏)
  13. 会员数据化运营应用场景与分析模型
  14. “晴耕 · 白话”栏目上线
  15. Dell E7440加装硬盘
  16. Google Chrome 中国官网最新版离线安装包下载地址
  17. python拼多多1分抢手机_如何抢到拼多多1元秒杀?抢不到是怎么回事?
  18. 【图形学】刚体的旋转
  19. Nginx 搭建RTMP视频点播 直播 HLS服务器
  20. SXMB_MONI传输记录报错:具有无效值 BE #SAP #PO #REST

热门文章

  1. CAD快速选择相同图形
  2. BBR 加速比收敛讲解python示例
  3. 每月明星计划(12 月),ECHO:我们的意见万岁!
  4. Java面试问题总结归纳
  5. Ajax 异步同步请求
  6. 概述 | 全景图像拼接技术全解析
  7. MFC如何在单文档下添加背景图片
  8. 五、数组、字符串以及冒泡排序--附代码案例
  9. 【机器学习必备知识】NumPy线性代数详解
  10. .Net IIS 内存溢出(System.OutOfMemoryException)