前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据采集与解析案例之:2020博客之星评选

数据采集与解析案例之:2020博客之星评选

作者头像
一头小山猪
发布于 2021-02-20 00:58:20
发布于 2021-02-20 00:58:20
41200
代码可运行
举报
文章被收录于专栏:微光点亮星辰微光点亮星辰
运行总次数:0
代码可运行

数据采集与解析案例之:2020博客之星评选

一、博客之星

2020年的博客之星已经开始啦,根据规则投票会持续一段时间,但是在活动页面并未有实时排行榜,本文将用爬虫实现数据的采集以及排序,可以直接查看到评比排行~同时,在下也有幸入选博客之星TOP 200,如果你手里还有多余的票票,请不要错过投票的机会,点击阅读原文即可为小猪投上宝贵的N票,不胜感激

二、实现思路

1. 确定数据源

首先我们需要在页面上获得数据,由于每次刷新数据都是会变化的,所以一般都是Ajax请求,我们需要用到开发者工具来查看网络请求。

  • 如何呼出开发者工具

在进行页面分析的时候,浏览器的开发者工具是不必可少的,笔者以蓝狐(火狐浏览器开发版)为例。对于其他的浏览器,主要都是基于Gecko(火狐内核)、Blink(Chrome内核)、Webkit(Safari内核)、Trident(IE内核)来套的壳子,所以整体的呼出方式不会差别很大。首先我们在页面空白处点击右键 -> 点击检查元素

  • 寻找数据源

页面链接:https://bss.csdn.net/m/topic/blog_star2020,打开后切换至网络栏目,点击重新载入:

可以按照类型排序,过滤掉一些静态资源的请求。发现数据来自于一个getUser的接口,返回的数据可以使用JSON格式进行解析。

2. 实现步骤

找到数据源以后,步骤就比较明确了。在获取数据之后进行解析,提取出我们需要的两个字段:博主名称当前票数,最后再对数据排序输出。我们将使用Python来进行实现,需要先安装scrapy(爬虫框架)和json(方便解析JSON格式数据)两个组件,可以使用如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install scrapy
pip install json

三、实现过程

1. 创建项目

安装好scrapy后,在命令终端中选定一个文件夹,使用如下命令创建一个项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy startproject StarRank

其中项目名称为StarRank,创建完成后可以直接使用Pycharm打开,项目结构如下:

2. 数据采集

接下来我们在spiders文件夹中创建一个python文件:star_spider.py,来完成数据的采集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scrapy

class StarSpider(scrapy.Spider):
    # 定义爬虫名称,在启动任务时指定
    name = "star"

    def start_requests(self):
        # 声明访问地址链接
        url = "https://bss.csdn.net/m/topic/blog_star2020/getUsers"
        # 发送请求,同时指定回调函数(自定义)
        yield scrapy.FormRequest(url, callback=self.parse)

3. 解析排序

数据接收到之后是一个JSON结构的字符串,我们可以引入json库来快速的解析,同时对数据进行排序,回调函数内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def parse(self, response):
        # 获取json数据中的data部分
        data_list = json.loads(response.text)['data']
        # 定义一个字典类型
        dict = {}
        for data in data_list:
            # 提取出博主名称与当前票数,成对儿存放
            dict[data["nick_name"]] = int(data["vote_num"])
        # 使用sorted根据字典的value进行降序排序
        rank = sorted(dict.items(),key=lambda x:x[1],reverse=True)
        i = 1
        # 对元组进行遍历,输出结果
        for name,count in rank:
            print("第" + str(i) + "名票数:" + str(count) + ",博主:" + name)
            i += 1

4. 完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scrapy
import json

class StarSpider(scrapy.Spider):
    name = "star"

    def start_requests(self):
        url = "https://bss.csdn.net/m/topic/blog_star2020/getUsers"
        yield scrapy.FormRequest(url, callback=self.parse)

    def parse(self, response):
        data_list = json.loads(response.text)['data']
        dict = {}
        for data in data_list:
            dict[data["nick_name"]] = int(data["vote_num"])
        rank = sorted(dict.items(),key=lambda x:x[1],reverse=True)
        i = 1
        for name,count in rank:
            print("第" + str(i) + "名票数:" + str(count) + ",博主:" + name)
            i += 1

代码编写完成后,进入到项目的根目录,即spiders文件夹的上一级目录,使用如下命令即可启动项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy crawl star

5. 关闭日志

对于一般的数据处理流程来说,应该把数据直接保存至json或csv文件中,然后再使用单独的程序进行读取和处理。本例为了方便对数据直接进行了处理,带来的问题就是每次执行时会有很多爬虫任务执行时产生的日志信息,我们可以修改settings.py文件,在其中将日志级别调整至ERROR即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LOG_LEVEL = 'ERROR'

最终执行效果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微光点亮星辰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Python实战】 ---- 爬虫练习 爬取 CSDN 2020 博客之星投票数据
效果 2020 博客之星年度总评选排名 分析网页数据 2020 博客之星年度总评选 页面数据接口分析 2.1 (以谷歌浏览器为例) 浏览器打开2020 博客之星年度总评选 ===》 F12(鼠标右键 ===》 检查) ===》 Network ===》 XHR ===》 在列表中找到数据接口点击 2.2 查看接口和请求方式 当前实例数据接口:https://bss.csdn.net/m/topic/blog_star2020/getUsers 请求方式:POST 2.3 查看请求
Rattenking
2021/09/07
6050
python爬虫之微打赏(scrapy版)创建项目itemssettingsweidashangspider保存为csv文件
上次写到单线程的微打赏爬虫,知道微打赏需要用post请求,那今天看看如何用scrapy完成post请求。 创建项目 打开cmd,输入以下代码即可创建scrapy项目。 scrapy startproject weidashang cd weidashang scrapy genspider weidashangspider wds.modian.com 第二、三行用于创建spider,这样就不用自己在编辑器中手动新建。 items import scrapy class WeidashangItem(sc
罗罗攀
2018/07/03
8370
[387]scrapy模拟登陆
通过scrapy.FormRequest能够发送post请求,同时需要添加fromdata参数作为请求体,以及callback
周小董
2022/04/12
9320
[387]scrapy模拟登陆
Python爬虫入门教程 30-100 高考派大学数据抓取 scrapy
终于写到了scrapy爬虫框架了,这个框架可以说是python爬虫框架里面出镜率最高的一个了,我们接下来重点研究一下它的使用规则。
梦想橡皮擦
2019/02/27
8010
Python爬虫入门教程 30-100 高考派大学数据抓取 scrapy
使用Scrapy有效爬取某书广告详细过程
在Scrapy社区中,提出了一个关于如何使用Scrapy从社交媒体网站上提取广告的问题。虽然这是一个普遍的需求,但每个社交媒体网站都有其独特的结构和请求方式,因此没有一个种通用的方法可以适用于所有情况。
小白学大数据
2023/12/26
2730
学会这4个爬虫神器,三分钟就能搞定数据采集!
在信息爆炸的时代,数据就是财富。无论是市场调研、竞品分析,还是个人兴趣研究,快速且准确地获取所需数据至关重要。今天,就为大家揭秘 4 个功能实用、强大的爬虫神器,有适合零代码无编码基础的,也有需通过编程进行深度定制的,让你轻松实现三分钟搞定数据采集!
测试开发技术
2025/04/15
4810
学会这4个爬虫神器,三分钟就能搞定数据采集!
大数据预测CSDN2018博客之星评选结果
闲话不多说,我们直接用数据说话。(因为绝大多数同学都只是关心一下结果,后面再给大家演示数据是怎么得到的) 按照CSDN的要求:
我就是马云飞
2018/12/27
7030
大数据预测CSDN2018博客之星评选结果
聊聊逆向爬取数据
最好的挣钱方式是钱生钱,怎样钱生钱呢,钱生钱可以通过投资,例如买股票、基金等方式,有人可能说买股票基金发财,我没这样的命和运气。买股票基金靠的不只有命运和运气,更多靠的是长期的经验和对股票基金数据的分析,今天我们使用scrapy框架来js逆向爬取某证信数据平台的国内指数成分股行情数据。
我被狗咬了
2021/11/16
1.2K0
聊聊逆向爬取数据
Python scrapy框架的简单使用
注意:Scrapy运行ImportError: No module named win32api错误。请安装:pip install pypiwin32
Python知识大全
2020/02/13
1.1K0
Python scrapy框架的简单使用
python爬虫scrapy模拟登录demo
背景:初来乍到的pythoner,刚开始的时候觉得所有的网站无非就是分析HTML、json数据,但是忽略了很多的一个问题,有很多的网站为了反爬虫,除了需要高可用代理IP地址池外,还需要登录。例如知乎,很多信息都是需要登录以后才能爬取,但是频繁登录后就会出现验证码(有些网站直接就让你输入验证码),这就坑了,毕竟运维同学很辛苦,该反的还得反,那我们怎么办呢?这不说验证码的事儿,你可以自己手动输入验证,或者直接用云打码平台,这里我们介绍一个scrapy的登录用法。
公众号---人生代码
2019/07/24
1.5K0
Scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo。这次我会以爬取豆瓣电影TOP250为例进一步为大家讲解一个完整爬虫的流程。 工具和环境 语言:python
木制robot
2018/04/13
1.9K0
Scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
《Learning Scrapy》(中文版)第5章 快速构建爬虫一个具有登录功能的爬虫使用JSON APIs和AJAX页面的爬虫在响应间传递参数一个加速30倍的项目爬虫可以抓取Excel文件的爬虫总结
第3章中,我们学习了如何从网页提取信息并存储到Items中。大多数情况都可以用这一章的知识处理。本章,我们要进一步学习抓取流程UR2IM中两个R,Request和Response。 一个具有登录功能的爬虫 你常常需要从具有登录机制的网站抓取数据。多数时候,网站要你提供用户名和密码才能登录。我们的例子,你可以在http://web:9312/dynamic或http://localhost:9312/dynamic找到。用用户名“user”、密码“pass”登录之后,你会进入一个有三条房产链接的网页。现在的问
SeanCheney
2018/04/24
4.2K0
《Learning Scrapy》(中文版)第5章 快速构建爬虫一个具有登录功能的爬虫使用JSON APIs和AJAX页面的爬虫在响应间传递参数一个加速30倍的项目爬虫可以抓取Excel文件的爬虫总结
爬虫框架Scrapy 之(四) ---
scrapy的下载器有Request和FormRequest两种,分别用来处理get请求和post请求
py3study
2020/01/16
7070
Scrapy爬虫框架介绍
Scrapy爬虫框架介绍 文档 英文文档 中文文档 什么是scrapy 基于twisted搭建的异步爬虫框架. scrapy爬虫框架根据组件化设计理念和丰富的中间件, 使其成为了一个兼具高性能和高扩展的框架 scrapy提供的主要功能 具有优先级功能的调度器 去重功能 失败后的重试机制 并发限制 ip使用次数限制 .... scrapy的使用场景 不适合scrapy项目的场景 业务非常简单, 对性能要求也没有那么高, 那么我们写多进程, 多线程, 异步脚本即可. 业务非常复杂, 请求之间有顺序
友儿
2022/09/29
3700
Scrapy爬虫框架介绍
一日一技:Scrapy 如何正确 Post 发送 JSON 数据
我们知道,HTTP请求的 POST 方式,提交上去的数据有很多种格式。例如JSON/form-data/x-www-form-urlencoded等等。我们在 Postman 的 POST 请求里面,可以看到这些数据格式,如下图所示:
青南
2021/06/23
3.4K0
一日一技:Scrapy 如何正确 Post 发送 JSON 数据
Python:Spider
Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。
Lansonli
2021/10/09
7220
python scrapy爬虫练习(1) 爬取豆瓣电影top250信息
文章目录 一、分析网页 目标URL:https://movie.douban.com/top250?start=0&filter= 每一页有25条电影信息,总共10页。检查网页可以发现,每条电影的详细
叶庭云
2020/09/17
5.1K0
python  scrapy爬虫练习(1)   爬取豆瓣电影top250信息
Scrapy 爬虫 --- 创建
想来能学习 Scrapy 肯定 Python 环境是安装好的,所以就可以直接使用命令
andrew_a
2019/07/30
5380
Scrapy 爬虫 --- 创建
Scrapy_Study01
对于以上四步而言,也就是各个组件,它们之间没有直接的联系,全部都由scrapy引擎来连接传递数据。引擎由scrapy框架已经实现,而需要手动实现一般是spider爬虫和pipeline管道,对于复杂的爬虫项目可以手写downloader和spider 的中间件来满足更复杂的业务需求。
Echo_Wish
2023/11/30
3010
Scrapy_Study01
Scrapy框架系列--爬虫又被封了?(2)
上一篇文章《爬虫利器初体验(1)》中,我们举了个简单的栗子,但是在真实的开发中这样的爬虫代码很容易就会被封掉。那么怎么样才能避免这些事发生呢?这一这篇文章我们一起来学习,如何健壮我们的爬虫代码。
1480
2019/08/06
8370
推荐阅读
相关推荐
【Python实战】 ---- 爬虫练习 爬取 CSDN 2020 博客之星投票数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验