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 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 , "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 ) // 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
  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.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复制错,只要没有把上面的参数写错就行。

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

  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脚本,可以对百度指数进行爬虫,于是我稍微修改了部分代码,做了一个可以直接返回pd.DataFrame的数据框的类;然后后面又加了一个小的可视化代码。这里和大家分享,只要使用这个脚本,就可以将百度指数数据下载下来,并且保存。具体步骤1. 获得cookie值百度指数是需要登陆,进行 因为百度指数中需求图谱的关键词只以一周为单位显示,所以为了将更多天数的关键词汇总,写了以下代码帮助大家~ ps:我是工管的,Python是我业余学的,所以代码写的比较丑陋请见谅… 一、使用datetime计算查询的日期 百度指数的params如下所示: 'wordlist[]': '原神',#这里修改关键词 'datelist': str(next_time.strftime('%Y%m%d'). url = 'https://www.baidu.com' html = requests.get(url).text soup = BeautifulSoup(html, 'lxml') 输出...
千锋教育 Python 视频教程 www.qfedu.com/video 做真实的自己-用良心做教育 python 入门配套教程百度分享 Python 由于其简单,快速,库丰富的特点在国内使用的越来越广泛。最 近几年它出现了爆发式的增长,而且与中国人密切相关。所以,人多真的力量 大啊!好,小编重点该提重点了。python 教程百度云在此,请点击以下链 接: 千锋 Python 基础教程:http://pan.baidu.com/s/1qYTZiNE Python 课程教学高手晋级视频总目录: http://pan.baidu.com/s/1hrXwY8k Python 课程 windows 知识点:http://pan.baidu.com/s/1kVcaH3x Python 课程 linux 知识点:http://pan.baidu.com/s/1i4VZh5b Python 课程 web 知识点:http://pan.baidu.com/s/1jIMdU2i Python 课程机器学习:http://pan.baidu.com/s/1o8qNB8Q Python 课程-树莓派设备:
  有个需要,需要把某个目录下的目录结构进行复制,不要文件,当目录结构很少的时候可以手工去建立,当目录结构复杂,目录层次很深,目录很多的时候,这个时候要是还是手动去建立的话,实在不是一种好的方法,弄不好会死人的。写一个python脚本来处理吧。   写python脚本前,先了解几个东西 复制代码 代码如下: #!/usr/bin/python 这个东西写过脚本的人都知道,用来标明该脚本的执行器,类似的还有 复制代码 代码如下: #!/bin/bash       通过bash来执行 #!/usr/local/php/bin/php 通过php执行器来执行    # -*-
要用Python爬取百度指数,你需要使用百度指数的API。以下是一些步骤: 1. 首先,你需要申请百度指数API的访问权限。你可以在百度指数API官网上注册并申请访问权限。 2. 在获得访问权限后,你需要使用Python的requests库来发送HTTP请求,从而获取百度指数的数据。你可以在Python中使用如下代码发送HTTP请求: import requests url = "http://index.baidu.com/api/SearchApi/getRegionIndex?region=0&word=Python" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" response = requests.get(url, headers=headers) print(response.text) 这个代码会获取Python在全国的百度指数数据。 3. 解析响应数据。百度指数API返回的数据是JSON格式的,所以你需要使用Python的json库解析响应数据。以下是一些示例代码: import json data = json.loads(response.text) print(data['data']['userIndexes'][0]['all']['avg']['index']) 这个代码会输出Python在全国的平均百度指数。 你可以根据百度指数API的文档,获取更多的数据和参数。