注意

更新(2022-07-01日更新)

1. 估计是百度指数修改了爬虫策略,目前已更新为最新版本~

前言

有时候大家需要知道一个关键词在互联网上的热度,想知道某个关键词的热度变化趋势。大家可能就是使用百度指数、微信指数之类的。非常好用,但是就是不能把数据下载保存下来,不方便我们后面进行操作。

我无意间看到别人提供的python脚本,可以对百度指数进行爬虫,于是我稍微修改了部分代码,做了一个可以直接返回pd.DataFrame的数据框的类;然后后面又加了一个小的可视化代码。这里和大家分享,只要使用这个脚本,就可以将百度指数数据下载下来,并且保存。

具体步骤

1. 获得cookie值

百度指数是需要登陆,进行用户验证,因此,我们要登陆百度指数,然后随便搜索一个关键词,比如python。
然后在网页空白地方,右键打开【检查】,然后进入【网络】

这个时候会发现【网络】里面都是空的,需要重新刷新网页即可看到所有内容。内容太多了,注意选择【Fetch/XHR】.

然后找到index?开头的文件,查看他的【标头】、查看他的【Cookie】.将这个cookie的值复制

2. 使用我的代码

  1. 基础代码,只要复制好就行
import requests
import json
from datetime import date, timedelta
import pandas as pdclass DownloadBaiDuIndex(object):def __init__(self, cookie):self.cookie = cookieself.headers = {"Connection": "keep-alive","Accept": "application/json, text/plain, */*","User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36","Sec-Fetch-Site": "same-origin","Sec-Fetch-Mode": "cors","Sec-Fetch-Dest": "empty","Referer": "https://index.baidu.com/v2/main/index.html","Accept-Language": "zh-CN,zh;q=0.9",'Cookie': self.cookie,"Host": "index.baidu.com","X-Requested-With": "XMLHttpRequest","Cipher-Text": "1656572408684_1656582701256_Nvm1pABkNsfD7V9VhZSzzFiFKylr3l5NR3YDrmHmH9yfFicm+Z9kmmwKVqVV6unvzAEh5hgXmgelP+OyOeaK8F21LyRVX1BDjxm+ezsglwoe1yfp6lEpuvu5Iggg1dz3PLF8e2II0e80ocXeU0jQFBhSbnB2wjhKl57JggTej12CzuL+h9eeVWdaMO4DSBWU2XX6PfbN8pv9+cdfFhVRHCzb0BJBU3iccoFczwNQUvzLn0nZsu0YPtG5DxDkGlRlZrCfKMtqKAe1tXQhg3+Oww4N3CQUM+6A/tKZA7jfRE6CGTFetC7QQyKlD7nxabkQ5CReAhFYAFAVYJ+sEqmY5pke8s3+RZ6jR7ASOih6Afl35EArbJzzLpnNPgrPCHoJiDUlECJveul7P5vvXl/O/Q==",}def decrypt(self, ptbk, index_data):n = len(ptbk) // 2a = dict(zip(ptbk[:n], ptbk[n:]))return "".join([a[s] for s in index_data])def get_index_data_json(self, keys, start=None, end=None):words = [[{"name": key, "wordType": 1}] for key in keys]words = str(words).replace(" ", "").replace("'", "\"")url = f'http://index.baidu.com/api/SearchApi/index?area=0&word={words}&area=0&startDate={start}&endDate={end}'print(words, start, end)res = requests.get(url, headers=self.headers)data = res.json()['data']uniqid = data['uniqid']url = f'http://index.baidu.com/Interface/ptbk?uniqid={uniqid}'res = requests.get(url, headers=self.headers)ptbk = res.json()['data']result = {}result["startDate"] = startresult["endDate"] = endfor userIndexe in data['userIndexes']:name = userIndexe['word'][0]['name']tmp = {}index_all = userIndexe['all']['data']index_all_data = [int(e) for e in self.decrypt(ptbk, index_all).split(",")]tmp["all"] = index_all_dataindex_pc = userIndexe['pc']['data']index_pc_data = [int(e) for e in self.decrypt(ptbk, index_pc).split(",")]tmp["pc"] = index_pc_dataindex_wise = userIndexe['wise']['data']index_wise_data = [int(e)for e in self.decrypt(ptbk, index_wise).split(",")]tmp["wise"] = index_wise_dataresult[name] = tmpreturn resultdef GetIndex(self, keys, start=None, end=None):today = date.today()if start is None:start = str(today - timedelta(days=8))if end is None:end = str(today - timedelta(days=2))try:raw_data = self.get_index_data_json(keys=keys, start=start, end=end)raw_data = pd.DataFrame(raw_data[keys[0]])raw_data.index = pd.date_range(start=start, end=end)except Exception as e:print(e)raw_data = pd.DataFrame({'all': [], 'pc': [], 'wise': []})finally:return raw_data
  1. 使用上面的类

使用上面的类,然后使用下面的代码。
先初始化类,然后在使用这个对象的GetIndex函数,里面的参数keys就是传递一个关键词就行,要用列表形式传递。

说更加简单一点的,只要把python替换成别的关键词就行了,然后时间也都是文本形式,样式就是’yyyy-mm-dd’形式就行。

cookie = '你的cookie值,注意使用英文单引号;就是直接复制就行了'# 初始化一个类
downloadbaiduindex = DownloadBaiDuIndex(cookie=cookie)data = downloadbaiduindex.GetIndex(keys=['python'], start='2021-01-01', end='2021-11-12')data
  1. 保存数据

如果想保存数据,直接可以这么写:

data.to_csv('data.csv')

可视化

获得数据已经很简单了,接下来可视化,就是非常简单的事情了,你用别的语言处理数据也都可以了。我这里简单的画一个时间序列图:

import plotly.graph_objects as goimport pandas as pd
df = data
fig = go.Figure([go.Scatter(x=df.index, y=df['all'], fill='tozeroy')])
fig.update_layout(template='plotly_white', title='python 百度指数')
fig.show()
fig.write_html('python.html')

结果如下:

总结

上面基本上没有任何难点了,只要没把cookie复制错,只要没有把上面的参数写错就行。

反馈

如果在使用上有任何问题,可以加我微信,然后进群一起交流沟通~

参考链接

  1. https://blog.csdn.net/as604049322/article/details/121490054
  2. https://towardsdatascience.com/introduction-to-interactive-time-series-visualizations-with-plotly-in-python-d3219eb7a7af
  3. https://plotly.com/python/filled-area-plots/

python获得百度指数脚本[免费分享]相关推荐

  1. Python 爬虫 百度指数

    本来是想给学生们演示如果使用selenium+浏览器抓取淘女郎网站的图片.但是淘宝不给面子,网站已经访问不了. 所以改抓百度指数的数据了,这是第一部分,比较简单的演示:selenium+浏览器(我这是 ...

  2. 火爆全网,495页《看漫画学Python》全彩PDF免费分享,入门编程培养兴趣首选

    在当下全民互联网,大数据的时代,Python已然成为了学习大数据.人工智能时代的首选编程语言,Python因上手简单被越来越多的人所喜爱,近几年更是在各类语言使用排行榜中稳居第一,而且每年是用人数还在 ...

  3. 快上车 全套Python零基础入门教程免费分享 !

    前言 随着近年来Python的兴起,数学建模的语言不仅限于c.c++和matlab,python由于本身自带的科学计算库以及一些图形可视化库,python也成为数学建模的常用编程语言之一. 我们都知道 ...

  4. Python人工智能实战项目教程免费分享学习:人工智能项目《AI在线医生》

    人工智能可以说是大家都在说的,但是真正会做人工智能的程序员还是少数,为了更好地提升自己,现在仍然有很多小伙伴都在寻找人工智能的项目,今天就给小伙伴们分享一下人工智能的学习项目:<AI在线医生&g ...

  5. Python编写薅羊毛脚本经验分享

    蛮多朋友加了群,为了方便朋友们理解和使用脚本,特来进一步说明.提醒,本期不仅需要Python基础,还得理解面向对象和懂多线程.请酌情观看. 一.不同需求的难度差别 薅羊毛脚本,就是想用程序来做重复动作 ...

  6. 盘点一款手机Python编程神器——AidLearning(免费分享)

    如果你是个对编程比较感兴趣或者正走在这条康庄大道上的技术宅,那我强烈向你推荐以下神器,对于没资金买电脑的人来说是一个福音,因为它实在是太优秀了,那么它是什么?一起来看看吧~ 领取方式(备注AidLea ...

  7. 用python解密百度指数数据

    获取数据 使用chrome浏览器的开发者工具,获取请求数据.注意一共有两个请求,https://index.baidu.com/api/SearchApi/index 和 https://index. ...

  8. 分享 6 个百度出品的免费工具,你用过几个?

    今天分享百度出品的 6 款工具,每一款都是十分良心,相信很多人还不知道. 1:百度指数 百度指数是免费公开的数据分享平台.需要做线上调查和当前舆论趋势分析的时候,也是很顺手的工具箱. 通过输入关键词, ...

  9. 【Python爬虫】百度指数爬取+导入数据库+QuickBI展示

    百度指数爬取原文在这里:如何用Python下载百度指数的数据_小小明-代码实体的专栏-CSDN博客 00.序言 一直想把百度指数每天定时爬下来,然后放到Dashboard里展示,终于,我看到了大神给出 ...

最新文章

  1. java get resttemplate 请求传递数组_RestTemplate入门
  2. mysql用户权限管理的问题
  3. 079_html5内联SVG
  4. 第十七次ScrumMeeting会议
  5. 阮一峰react demo代码研究的学习笔记 - demo5 debug
  6. php内核一 一次请求与结束
  7. RDC出库财务计费逻辑
  8. wince flash Android,关于wince下用C#实现flash播放器
  9. Vuforia的ARcamera通过识别人工标识码出现虚拟物体后在其相机视野中不显示人工标识码
  10. python做人工智能-马哥教育官网-专业Linux培训班,Python培训机构
  11. 在设计软件测试用例的原则,设计软件测试用例需要遵循的四条原则
  12. 中国土地市场网数据采集爬取landChain抓取Python爬虫
  13. 5 月最大的 GameFi 崩溃受害者能否在熊市中生存?| May Monthly Report
  14. Android 支付宝sdk接入问题:不能唤起支付宝客户端,或者偶然唤起支付客户端
  15. php只取时间的下士_PHP获取各种起止时间
  16. 微型计算机奔4piv,微型计算机中的“奔3”(PIII)或“奔4”(PIV)指的是______。
  17. 计算机控制系统接地方式,计算机控制系统接地技术探讨
  18. ctfhub JWT
  19. PEP 634 – Structural Pattern Matching: Specification
  20. 答疑丨北京积分落户,职住已加6分,还能加分吗?

热门文章

  1. 计算机软件图标乱码,win7系统图标汉字显示乱码变成奇怪符号的解决方法
  2. Oracle ASM Active Change Directory
  3. -uc/OS系统移植(基于STM32F103C8T6,超详细讲解)
  4. 台达变频器s1参数设置_台达变频器操作面板需要调那几个参数。
  5. PPT模板免费下载--好用的下载网站推荐
  6. 银行柜面系统_无纸化办公!就是这么给力!! 临猗农商银行新一代柜面系统成功上线!!!...
  7. 联迪商用中标民生银行小微金融部智能POS采购项目
  8. html css3加速,10个加速CSS开发的框架
  9. 【玩转yolov5】使用bdd100k数据集训练行人和全车模型
  10. 为什么很多人辛劳一生,仍然生活在社会底层?