-
基础代码,只要复制好就行
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
-
使用上面的类
使用上面的类,然后使用下面的代码。
先初始化类,然后在使用这个对象的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复制错,只要没有把上面的参数写错就行。
如果在使用上有任何问题,可以加我微信,然后进群一起交流沟通~
- https://blog.csdn.net/as604049322/article/details/121490054
- https://towardsdatascience.com/introduction-to-interactive-time-series-visualizations-with-plotly-in-python-d3219eb7a7af
- 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的文档,获取更多的数据和参数。