py获取前端的参数_获取百度指数

a31116aa2f964553efd644fd7916b901.png

百度指数简介

百度指数有一个详细的帮助文档,下面列出来的几个点是我的个人总结:

  • 百度指数是度量网民搜索量多寡的指数,可以用来描述社会对某某某的关注度。
  • 百度指数大众版不要钱,百度指数专业版要钱,但不对个人用户开放。
  • 百度指数不提供API直接获取数据,需要自行爬取。
  • 百度指数每天更新,PC端数据最早到2006年6月,移动端数据最早到2011年1月。如需要获取2011年以前的百度指数,请仅获取PC端搜索数据。
  • 如果检索的百度指数跨度超过一年,页面上显示的数据将是周指数而不是日指数,如果需要大段时间内的百度指数,需要分段获取后手工拼接。
  • 使用+可以汇总若干个关键词的检索量,比如广场+炸鸡这个关键词的百度指数是广场炸鸡的百度指数的和,百度指数最多支持三个关键词的累加搜索。
  • 使用,(英文输入法下的逗号)可以将不同的关键词隔开,用来做对比分析,最多支持个关键词的比较。
  • 百度指数需要登录以后才能访问。
  • 还有许多功能尚未提及,感兴趣的老铁多玩一下百度指数应该就能知道它们都是啥意思了。

接口分析

毫不意外,百度指数是通过Ajax获取的,我们通过简单的查找后可以发现它是通过下面这个请求获得的:

615f68740c7e232126c8691d797d001a.png
获取百度指数的Ajax请求

URL当中有一些格式化以后的字符,直接看不知道是啥意思,把它的具体内容截图:

72d1ae7e0c281738843fae64139f75f7.png
表示要获取的关键词为炸鸡,区域是全国范围内,时间是30天以内

事实上,我第一次做百度指数爬虫的时候,参数都不是长这个样子的,说明百度指数更新了,故而在这里强调一下,我写下这篇专栏文章的日期是2020年8月5日。如果您阅读这篇文章的时间距离这个日期太过久远的话,本文可能就只有借鉴意义了。

下图给出的是该请求返回的JSON格式的数据,其中all代表PC+移动的数据,PCwise分别代表着PC端和移动端的检索数据,展开以后data对应的数据就是返回的百度指数,endDatestartDate分别对应的便是这条百度指数的截止日期和开始日期。

6293c63f15d238be43b9f1c85f7fae08.png
上述GET请求返回的JSON数据

很明显,我们拿到的数据是加密后的密文,我们为了拿到真实数据需要知道它的解密方式。通过互联网检索,不难得知,百度指数的解密方式非常简单,它首先从服务器上获取到一个解密密码,然后再调用JavaScript进行解密。下图展示的是为了拿到密码而发送的GET请求,该请求有一个参数uniqid,其取值正是上一个请求返回的JSON数据中uniqid键对应的内容,感兴趣的老铁可以放大这段文字上下的两张图,做一个简单的对比。

1aaa44c5fccfc74bcdd58937d8c4a9ff.png
为获取密码而发送的GET请求

拿到密码之后就可以百度一下百度指数的解密方式,可以搜索到现成的解密代码。我则想给大家看一下如何查找解密代码,算是授人以渔吧。通过下图介绍的方法可以看到这条请求究竟是如何发送出来的,我们可以一个一个点进去,看看有没有设置回调函数(就是拿到了服务器的返回值以后要执行的函数)。经验告诉我们vue开头的那些函数都不用去看,因为它们应该是框架vue提供的代码。点击名为fetchFeedIndex的触发器,我想我们就找到了我们想要的回调函数了。

5d508996ad7088b8f2f737177f76d39e.png
为获取解密密码而发送的请求的触发器列表

首先这段代码的头上写着then,感觉非常像一个回调函数,然后在第二个红线框内明晃晃地写着decrypt这样的字样。在这一行加上一个断点,然后刷新一下网页,看看这个名为trendUtil.decrypt的函数定义是啥。

0f8e686d8aec868d51975b5c1bdd36ac.png
点击触发器得到的回调函数代码

虽然不太明白为什么设置的断点跳转到了另一个文件当中,但左右是可以看到这个函数的定义了,我们把鼠标滑到那个f decrypt(t,e) 上点一下就可以跳转到它的定义了,具体代码见下一张图(直接跳转过去的时候没有直接显示下面这个函数的定义,可以通过Ctrl+F定位一下)。

f4afdfed7d4711ccedb0b4ac23a01d37.png

f22625b8f81af1ab8e67ca0e02e3e4f5.png
看注释也知道它在干一件啥样的工作了

剩下的工作就是把这一段JavaScript代码用python改写一下就可以了。

爬虫获取百度指数

明白了百度指数是如何获取、解密后,还差一点辅助工作才能够正式开始爬虫。

首先,百度指数只有在登录状态下才能够获取数据,那我们必须拿一个可用的cookie,经过试验证明,我们只要拿到cookie中键名为BDUSS的值就可以了,大家通过F12打开开发者工具,然后在应用程序选项卡-->Cookie侧边栏中找到这个值就行了。

26042e41a09f15244c88955046782983.png

然后,前文演示用的例子只是查找30天以内的全国范围内的百度指数,我们要查找的应当是某个区域某一个时间段以内的百度指数。可以先在网页上设置好相应的检索条件,然后再打开开发者工具查看设置好这些条件以后发送的请求参数:

31c641baf67d7d930f335c2512d7ae28.png
查找2011年1月1日到2011年12月31日澳门关于炸鸡的百度指数

不难发现,其实就是多了startDate和endDate两个参数而已。

Python代码实现

当有了前面这些知识以后,我们可以很轻松地写出一个获取百度指数的爬虫,我将我写好的代码放在了我的Gitee仓库当中,感兴趣的老铁可以自行取阅。源代码当中写了比较多的注释,有一定python基础的同学应该能比较轻松地看懂。下面主要是介绍一下我这段源代码的使用方法。

3df73baa009998c7294ca9613cfea22b.png
  1. 按照上面介绍的方法,将cookie中BDUSS的值复制到app.login()当中。
  2. 设置好自己想要查找的关键词,地区,开始日期,结束日期和检索类型,具体可用的地区列表请查阅同一文件夹下的map.py文件,开始日期和结束日期之间的跨度不要超过一年,不然返回的数据将是以周计的数据。最后一个参数可以取值为allpcwise,分别代表获取PC+移动、PC、移动端的检索数据。
  3. 最后一行便是将获取到的数据存储到指定路径处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值