【python】爬取知乎热榜Top50保存到Excel文件中【附源码】

2024-01-09 01:20

本文主要是介绍【python】爬取知乎热榜Top50保存到Excel文件中【附源码】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎来到英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998

   一、导入必要的模块:

    这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应,以及os模块处理文件和目录操作。

        如果出现模块报错

        进入控制台输入:建议使用国内镜像源

pip install requests -i https://mirrors.aliyun.com/pypi/simple

         我大致罗列了以下几种国内镜像源:

        

清华大学
https://pypi.tuna.tsinghua.edu.cn/simple阿里云
https://mirrors.aliyun.com/pypi/simple/豆瓣
https://pypi.douban.com/simple/ 百度云
https://mirror.baidu.com/pypi/simple/中科大
https://pypi.mirrors.ustc.edu.cn/simple/华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

    

二、发送GET请求获取响应数据:

        设置了请求头部信息,以模拟浏览器的请求,函数返回响应数据的JSON格式内容。

def get_html(url):header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}response = requests.get(url=url, headers=header)# print(response.json())html = response.json()return html

        如何获取请求头:

        火狐浏览器:

  1. 打开目标网页并右键点击页面空白处。
  2. 选择“检查元素”选项,或按下快捷键Ctrl + Shift + C(Windows)
  3. 在开发者工具窗口中,切换到“网络”选项卡。
  4. 刷新页面以捕获所有的网络请求。
  5. 在请求列表中选择您感兴趣的请求。
  6. 在右侧的“请求标头”或“Request Headers”部分,即可找到请求头信息。

     将以下请求头信息复制出来即可

三、代码实现

这段代码是用来爬取知乎热榜数据并保存到 Excel 文件中的。具体实现方法如下:

  1. 定义了一个函数 get_time,用于获取当前时间,并可以按照指定的格式进行输出。

def get_time(fmt:str='%Y-%m-%d %H-%M-%S') -> str:'''获取当前时间'''ts = time.time()ta = time.localtime(ts)t = time.strftime(fmt, ta)return t
  1. 定义了一个函数 save_hot_list,用于保存热榜数据到 Excel 文件中。

def save_hot_list() -> None:# 请求头headers = {
​'User-Agent': 'osee2unifiedRelease/4318 osee2unifiedReleaseVersion/7.7.0 Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148','Host': 'api.zhihu.com',
​
​}# 请求参数params = (('limit', '50'),('reverse_order', '0'),)# 发送请求response = requests.get('https://zhihu.com/topstory/hot-list', headers=headers, params=params)
​items = response.json()['data']

首先定义请求头和请求参数,然后发送 GET 请求获取知乎热榜数据。其中 response.json()['data'] 取出了返回结果中的 data 字段,即热榜列表数据。

    rows = []now = get_time()# 取日期为文件夹名称dir_path = now.split(' ')[0]# 文件夹不存在则创建if not os.path.exists(dir_path):os.makedirs(dir_path)

定义一个空列表 rows 来存储热榜数据,然后获取当前时间并将其拆分为日期和时间两个部分。这里我们只需要日期部分作为保存数据的文件夹名称,如果这个文件夹不存在,则创建它。

  
  for rank, item in enumerate(items, start=1):target = item.get('target')title = target.get('title')answer_count = target.get('answer_count')hot = int(item.get('detail_text').split(' ')[0])follower_count = target.get('follower_count')question_url = target.get('url').replace('api', 'www').replace('questions', 'question')rows.append({'排名': rank,'标题': title,'回答数': answer_count,'关注数': follower_count,'热度(万)': hot,'问题链接': question_url})

遍历全部热榜数据,并从中取出我们需要的属性,包括:标题、回答数、关注数、热度和问题链接。将这些属性添加到 rows 列表中。

    df = pd.DataFrame(rows)now = get_time()excel_path = dir_path+'/Yan-英杰.xlsx'df.to_excel(excel_path, index=None)print(now, '的热榜数据数据已保存到文件', excel_path)

rows 列表转化为 Pandas 的 DataFrame,并将其保存到 Excel 文件中。Excel 文件的名称以当前日期作为文件夹名称,以 "Yan-英杰.xlsx" 作为文件名。最后输出保存完成的信息。

# 保存热榜数据
save_hot_list()

调用 save_hot_list 函数来执行保存操作。

四、效果图:

五、完整代码

import requests
import pandas as pd
import time
import osdef get_time(fmt:str='%Y-%m-%d %H-%M-%S') -> str:'''获取当前时间'''ts = time.time()ta = time.localtime(ts)t = time.strftime(fmt, ta)return tdef save_hot_list() -> None:# 请求头headers = {'User-Agent': 'osee2unifiedRelease/4318 osee2unifiedReleaseVersion/7.7.0 Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148','Host': 'api.zhihu.com',}# 请求参数params = (('limit', '50'),('reverse_order', '0'),)# 发送请求response = requests.get('https://zhihu.com/topstory/hot-list', headers=headers, params=params)items = response.json()['data']rows = []now = get_time()# 取日期为文件夹名称dir_path = now.split(' ')[0]# 文件夹不存在则创建if not os.path.exists(dir_path):os.makedirs(dir_path)# 遍历全部热榜,取出几个属性for rank, item in enumerate(items, start=1):target = item.get('target')title = target.get('title')answer_count = target.get('answer_count')hot = int(item.get('detail_text').split(' ')[0])follower_count = target.get('follower_count')question_url = target.get('url').replace('api', 'www').replace('questions', 'question')rows.append({'排名': rank,'标题': title,'回答数': answer_count,'关注数': follower_count,'热度(万)': hot,'问题链接': question_url})df = pd.DataFrame(rows)now = get_time()excel_path = dir_path+'/Yan-英杰.xlsx'df.to_excel(excel_path, index=None)print(now, '的热榜数据数据已保存到文件', excel_path)# 保存热榜数据
save_hot_list()

   给大家推荐一个网站

    IT今日热榜 一站式资讯平台


        里面包含了上百个IT网站,欢迎大家访问:IT今日热榜 一站式资讯平台

   iToday,打开信息的新时代。作为一家创新的IT数字媒体平台,iToday致力于为用户提供最新、最全面的IT资讯和内容。里面包含了技术资讯、IT社区、面试求职、前沿科技等诸多内容。我们的团队由一群热爱创作的开发者和分享的专业编程知识爱好者组成,他们精选并整理出真实可信的信息,确保您获得独特、有价值的阅读体验。随时随地,尽在iToday,与世界保持连接,开启您的信息新旅程!

IT今日热榜 一站式资讯平台IT今日热榜汇聚各类IT热榜:虎嗅、知乎、36氪、京东图书销售、晚点、全天候科技、极客公园、GitHub、掘金、CSDN、哔哩哔哩、51CTO、博客园、GitChat、开发者头条、思否、LeetCode、人人都是产品经理、牛客网、看准、拉勾、Boss直聘http://itoday.top/#/

这篇关于【python】爬取知乎热榜Top50保存到Excel文件中【附源码】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/585486

相关文章

Mac excel 同时冻结首行和首列

1. 选择B2窗格 2. 选择视图 3. 选择冻结窗格 最后首行和首列的分割线加粗了就表示成功了

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 喷泉码

因为要完成毕业设计,毕业设计做的是数据分发与传输的东西。在网络中数据容易丢失,所以我用fountain code做所发送数据包的数据恢复。fountain code属于有限域编码的一部分,有很广泛的应用。 我们日常生活中使用的二维码,就用到foutain code做数据恢复。你遮住二维码的四分之一,用手机的相机也照样能识别。你遮住的四分之一就相当于丢失的数据包。 为了实现并理解foutain

python 点滴学

1 python 里面tuple是无法改变的 tuple = (1,),计算tuple里面只有一个元素,也要加上逗号 2  1 毕业论文改 2 leetcode第一题做出来

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly93aC5mYW5nLmtlLmNvbS9sb3VwYW4v 目标:采集对应城市的