Python百度指数获取脚本下载并保存

 更新时间:2022年06月09日 09:14:56   作者:​ 北江爱国   ​  
这篇文章主要介绍了Python百度指数获取脚本下载并保存,基于原有的可以对百度指数进行爬虫的脚本做一个可直接返回pd.DataFrame的数据框的类加上可视化代码完成,需要的朋友可以参考一下

前言

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

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

具体步骤

1. 获得cookie值

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

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

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

2. 使用我的代码

基础代码,只要复制好就行:

import requests
import json
from datetime import date, timedelta
import pandas as pd
class DownloadBaiDuIndex(object):
    def __init__(self, cookie):
        self.cookie = cookie
        self.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,
        }

    def decrypt(self, ptbk, index_data):
        n = len(ptbk) // 2
        a = 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"] = start
        result["endDate"] = end
        for 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_data
            index_pc = userIndexe['pc']['data']
            index_pc_data = [int(e) for e in self.decrypt(ptbk, index_pc).split(",")]
            tmp["pc"] = index_pc_data
            index_wise = userIndexe['wise']['data']
            index_wise_data = [int(e)
                               for e in self.decrypt(ptbk, index_wise).split(",")]
            tmp["wise"] = index_wise_data
            result[name] = tmp
        return result

    def 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

使用上面的类:

使用上面的类,然后使用下面的代码。先初始化类,然后在使用这个对象的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

保存数据

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

data.to_csv('data.csv')

可视化

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

import plotly.graph_objects as go
import 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复制错,只要没有把上面的参数写错就行。

到此这篇关于Python百度指数获取脚本下载并保存的文章就介绍到这了,更多相关Python获取脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何将conda虚拟环境添加到Jupyter lab内核

    如何将conda虚拟环境添加到Jupyter lab内核

    这篇文章主要介绍了如何将conda虚拟环境添加到Jupyter lab内核问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python如何telnet到网络设备

    Python如何telnet到网络设备

    这篇文章主要介绍了Python如何telnet到网络设备,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-02-02
  • Python出现segfault错误解决方法

    Python出现segfault错误解决方法

    这篇文章主要介绍了Python出现segfault错误解决方法,分析了系统日志提示segfault错误的原因与对应的解决方法,需要的朋友可以参考下
    2016-04-04
  • Anaconda安装opencv库详细图文教程

    Anaconda安装opencv库详细图文教程

    这篇文章主要给大家介绍了关于Anaconda安装opencv库详细图文教程的相关资料,安装Anaconda后,你可以使用conda命令在Anaconda环境中安装OpenCV,文中有详细步骤,需要的朋友可以参考下
    2023-07-07
  • Python切片列表字符串如何实现切换

    Python切片列表字符串如何实现切换

    这篇文章主要介绍了Python切片列表字符串如何实现切换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 详解Python中的 type()函数

    详解Python中的 type()函数

    type()是一个内置函数,可以很方便地查询对象数据类型;主要有两种用法:一个参数和三个参数,这篇文章主要介绍了Python中的 type()函数,需要的朋友可以参考下
    2022-08-08
  • Python获取女友聊天记录详细流程

    Python获取女友聊天记录详细流程

    就在前段时间,在大学睡我上铺的兄弟,在兄嘚群里讨论,说:他发现女朋友这几天只要下班就坐在电脑前,不是工作原因。而且只要他靠近一点就会立即退出页面,所以他一直很怀疑,在群里问我们这一个个单身狗。然后就出现下面这一段对话
    2021-10-10
  • 每个 Python 开发者都应该知道的7种好用工具(效率翻倍)

    每个 Python 开发者都应该知道的7种好用工具(效率翻倍)

    Python 从一种小的开源语言开始,到现在,它已经成为开发者很受欢迎的编程语言之一。这篇文章主要介绍了每个 Python 开发者都应该知道的7种好用工具(效率翻倍),需要的朋友可以参考下
    2021-03-03
  • Python中分数的相关使用教程

    Python中分数的相关使用教程

    这篇文章主要介绍了Python中分数的相关使用教程,主要涉及分数的计算、约分等简单操作,是Python学习过程当中的基础,需要的朋友可以参考下
    2015-03-03
  • django之导入并执行自定义的函数模块图解

    django之导入并执行自定义的函数模块图解

    这篇文章主要介绍了django之导入并执行自定义的函数模块图解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论