百度指数很多时候在我们做项目的时候会很有帮助,从搜索引擎的流量端给到我们一些帮助,比如:家具行业的销量跟"装修","新房","二手房"等关键词是什么关系等等,技术培训行业那中语言现在能挣大钱,搜搜"Python","Scala","Spark"看这样,等等诸如此类。直接利用百度指数的视图是比较方便、直接的,但有时候我们需要拿到具体的数据进行二次加工,那怎么获取百度指数数据呢?

如果你是Python 大牛,你可能花点小时间搞个全自动的Python脚本,从登录到抓取,再到存储,甚至之后的数据处理、可视化都不费吹灰之力。但是,杀鸡焉用牛刀~~,且看下面

登录你的百度账户之后,粘贴你当前的Cookies。

Python大牛的地方就是这里,你需要每次都要粘贴你的当前Cookies,因为它隔一段时间就会失效!

替换下面COOKIES的内容

COOKIES = """BAIDUID=02DA87450898F2B6A448EC4E6BABBD97:FG=1; BIDUPSID=02DA87450898F2B6A448EC4E6BABBD97; PSTM=1560521518; BDUSS=EkwWHZQMkRQMGlGNWJObTVyMGZKN3NtUEtNfjFYSVl3ZFdCMU1Va1VFcVV0QzFkSVFBQUFBJCQAAAAAAAAAAAEAAACiUqIjemlxaW5nMjcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQnBl2UJwZda; BD_UPN=12314753; delPer=0; BD_CK_SAM=1; BD_HOME=1; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; PSINO=3; COOKIE_SESSION=2816823_0_8_8_15_12_0_1_8_3_47_2_2816775_0_3_0_1564379083_0_1564379080%7C9%23301580_12_1560863775%7C5; H_PS_PSSID=1466_21085_29522_29518_29099_29567_28839_29221_22159; sugstore=1; BDSVRTM=235"""

修改主代码里的关键词列表,后面就靠你了,自己修修改改又能用三年。

from urllib.parse import urlencode

from collections import defaultdict

import datetime

import requests

import json

import pandas as pd

"""

数据轮子,2019-07

"""

# # # # # # # # # # # # # # # # # # # # # # #

# 登录之后,百度首页的请求cookies,必填 !!!

# # # # # # # # # # # # # # # # # # # # # # #

COOKIES = """BAIDUID=02DA87450898F2B6A448EC4E6BABBD97:FG=1; BIDUPSID=02DA87450898F2B6A448EC4E6BABBD97; PSTM=1560521518; BDUSS=EkwWHZQMkRQMGlGNWJObTVyMGZKN3NtUEtNfjFYSVl3ZFdCMU1Va1VFcVV0QzFkSVFBQUFBJCQAAAAAAAAAAAEAAACiUqIjemlxaW5nMjcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQnBl2UJwZda; BD_UPN=12314753; delPer=0; BD_CK_SAM=1; BD_HOME=1; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; PSINO=3; COOKIE_SESSION=2816823_0_8_8_15_12_0_1_8_3_47_2_2816775_0_3_0_1564379083_0_1564379080%7C9%23301580_12_1560863775%7C5; H_PS_PSSID=1466_21085_29522_29518_29099_29567_28839_29221_22159; sugstore=1; BDSVRTM=235"""

headers = {

'Host': 'index.baidu.com',

'Connection': 'keep-alive',

'X-Requested-With': 'XMLHttpRequest',

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'

}

class BaiduIndex():

"""

百度搜索指数

:keywords: list or string ','

:start_date: string '2018-10-02'

:end_date: string '2018-10-02'

:area: int, search by cls.province_code/cls.city_code

"""

def __init__(self, keywords, start_date, end_date, area=0):

self._keywords = keywords if isinstance(keywords, list) else keywords.split(',')

self._time_range_list = self.get_time_range_list(start_date, end_date)

self._all_kind = ['all', 'pc', 'wise']

self._area = area

self.result = {keyword: defaultdict(list) for keyword in self._keywords}

self.get_result()

def get_result(self):

for start_date, end_date in self._time_range_list:

encrypt_datas, uniqid = self.get_encrypt_datas(start_date, end_date)

key = self.get_key(uniqid)

for encrypt_data in encrypt_datas:

for kind in self._all_kind:

encrypt_data[kind]['data'] = self.decrypt_func(key, encrypt_data[kind]['data'])

self.format_data(encrypt_data)

def get_encrypt_datas(self, start_date, end_date):

request_args = {

'word': ','.join(self._keywords),

'startDate': start_date,

'endDate': end_date,

'area': self._area

}

url = 'http://index.baidu.com/api/SearchApi/index?' + urlencode(request_args)

html = self.http_get(url)

datas = json.loads(html)

uniqid = datas['data']['uniqid']

encrypt_datas = []

for single_data in datas['data']['userIndexes']:

encrypt_datas.append(single_data)

return (encrypt_datas, uniqid)

def get_key(self, uniqid):

url = 'http://index.baidu.com/Interface/api/ptbk?uniqid=%s' % uniqid

html = self.http_get(url)

datas = json.loads(html)

key = datas['data']

return key

def format_data(self, data):

keyword = str(data['word'])

time_len = len(data['all']['data'])

start_date = data['all']['startDate']

cur_date = datetime.datetime.strptime(start_date, '%Y-%m-%d')

for i in range(time_len):

for kind in self._all_kind:

index_datas = data[kind]['data']

index_data = index_datas[i] if len(index_datas) != 1 else index_datas[0]

formated_data = {

'date': cur_date.strftime('%Y-%m-%d'),

'index': index_data if index_data else '0'

}

self.result[keyword][kind].append(formated_data)

cur_date += datetime.timedelta(days=1)

def __call__(self, keyword, kind='all'):

return self.result[keyword][kind]

@staticmethod

def http_get(url, cookies=COOKIES):

headers['Cookie'] = cookies

response = requests.get(url, headers=headers)

if response.status_code == 200:

return response.text

else:

return None

@staticmethod

def get_time_range_list(startdate, enddate):

"""

max 6 months

"""

date_range_list = []

startdate = datetime.datetime.strptime(startdate, '%Y-%m-%d')

enddate = datetime.datetime.strptime(enddate, '%Y-%m-%d')

while 1:

tempdate = startdate + datetime.timedelta(days=300)

if tempdate > enddate:

all_days = (enddate-startdate).days

date_range_list.append((startdate, enddate))

return date_range_list

date_range_list.append((startdate, tempdate))

startdate = tempdate + datetime.timedelta(days=1)

@staticmethod

def decrypt_func(key, data):

"""

decrypt data

"""

a = key

i = data

n = {}

s = []

for o in range(len(a)//2):

n[a[o]] = a[len(a)//2 + o]

for r in range(len(data)):

s.append(n[i[r]])

return ''.join(s).split(',')

if __name__ == '__main__':

# 最多同时请求5个关键词

baidu_index = BaiduIndex(keywords=['华为','大众','香奈儿'], start_date='2018-06-10', end_date='2019-07-04')

# 获取全部5个关键词的全部数据

# print(baidu_index.result['华为']['all'])

# 获取1个关键词的移动端数据

# print(baidu_index.result['华为']['wise'])

# 获取1个关键词的pc端数据

# print(baidu_index.result['以太坊']['pc'])

# 写出

data = baidu_index.result['华为']['all']

fn = 'Baidu_index_{}.xlsx'.format('华为(PC+移动)')

pd.DataFrame(data).to_excel(fn, index=False, engine='openpyxl')

python爬关键词百度指数_Python 抓取指定关键词的百度指数相关推荐

  1. python爬取图片源码_python抓取百度图片源码

    #!/usr/bin/python # -*- coding:utf-8 -*- import httplib2 import urllib.request import json #import u ...

  2. python爬去百度音乐_Python抓取百度音乐。

    今天挑战下百度音乐抓取,先用Chrome分析下请求的链接. 最关键的就是这个链接 http://play.baidu.com/data/music/songlink 请求这个带上songid就能返回给 ...

  3. python类百度百科_Python抓取百度百科数据

    抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分数据.本实例抓取百度百科python词条页面以及python相关词条页面的标题和简介. 分析目标:分析要抓取的url的格式,限定抓取范围.分析要抓 ...

  4. python大众点评霸王餐_python抓取大众点评商户信息

    数据说明: 本次爬取大众点评共8个字段信息,包括: 商户名字, 口味评分, 环境评分,服务评分,人均价格,评论数量,地址,商户星级 然后把数据存入excel表格 一 .首页部分 我们可以看到有很多分类 ...

  5. python玩王者荣耀皮肤_python 抓取王者荣耀皮肤 代码2年了 依旧可以抓取高清 王者皮肤...

    #!/usr/bin/env python #-*- coding: utf-8 -*- """抓取王者荣耀皮肤""" importrequ ...

  6. python 公众号文章发布_Python 抓取微信公众号文章

    版权声明:此文章转载自 Yushneng PyHub 如需转载请联系听云College团队成员阮小乙,邮箱:ruanqy#tingyun.com 微信公众号的文章链接有些是具有时效性的,过一段时间会变 ...

  7. python下载谷歌地图瓦片_python抓取天地图瓦片

    [实例简介] 抓取天地图瓦片 [实例截图] [核心代码] # _*_coding:utf-8_*_ from urllib import request import re import urllib ...

  8. python下载图片怎么保存_Python抓取站酷作品图片并保存至本地

    思路 1.通过 requests 模块请求网页,获取到网页的源码,其中包含了作品集的 URL 2.通过 BeautifulSoup 提取到作品集的 URL ,返回为列表,使用 for 循环遍历作品集 ...

  9. 百度搜索关键字抓取_怎么使百度竞价的效益最大化

    什么是百度竞价 百度推广是百度国内首创得一种按效果付费的网络推广方式,简单便捷的网页操作即可给企业带来大量潜在客户,有效提升企业知名度及销售额. "世界很复杂,百度更懂你",每天有 ...

最新文章

  1. Analyzer tool(MAT)分析JVM内存泄露案例
  2. 如何删除 Windows.old 文件夹
  3. 苹果首款自研芯片Mac成本可能上升 因设计改变
  4. linux服务器i o模型,高性能服务器框架--I/O模型
  5. LOCK TABLES
  6. 从 Nginx 到 Pandownload,程序员如何避免面向监狱编程?
  7. SQL进阶六:字符串函数
  8. 简单实现x的n次方pta_Hydramotion海默生-PTA(对苯二甲酸)在线粘度计
  9. [转] 背完这444句英语,你的口语绝对不成问题
  10. Azure China (4) 管理Azure China Storage Account
  11. 一元云购 java源码
  12. 深圳中科智美3D精确数据化整形软件系统三维扫描模块
  13. 数据库报duplicate XXX entry for key primary错误的可能原因以及解决方法
  14. x64dbg入门学习
  15. Huilder连接Android逍遥模拟器
  16. 爬取虎牙TV全站主播信息
  17. DeepFool运行代码中间问题
  18. linux 上oracle已经启动 但是客户端无法连接,Oracle 客户端连接排错
  19. c++_-nan(ind) NAN
  20. 51Nod_1534 棋子游戏【博弈论】

热门文章

  1. 小程序源码:好玩的表情包机器人-多玩法安装简单
  2. BaseAnimation是基于开源的APP,致力于收集各种动画效果(最新版本1.3)
  3. iOS 文件预览(PDF、Excel、World等)之QuickLook框架
  4. Jarvis OJ—Web
  5. 一个网络工程师的一天
  6. GitHub腾讯T14级SQL首席专家开源分布式数据库架构实践手册
  7. 不容错过的超赞项目管理PPT
  8. 李开复写给大学生的一封信
  9. 基于gazebo实现多无人车的编队仿真(一)
  10. 7款超适用的PC软件,实用强大,让您秒变大师兄