热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

百度指数如何批量获取?

百度指数:搜索指数是以网民在百度的搜索量为数据基础,以关键词为统计对象,科学分析并计算出各个关键词在百度网页搜索中搜索频次的加权和。其在研

百度指数:搜索指数是以网民在百度的搜索量为数据基础,以关键词为统计对象,科学分析并计算出各个关键词在百度网页搜索中搜索频次的加权和。其在研究关键词搜索趋势、洞察网民需求变化、监测媒体舆情趋势、定位数字消费者特征方面有重要的作用。

之前我们还戏称百度指数才是百度的良心之作!

如果想要批量获取一些字段的百度指数时,就涉及数据获取啦。

我查询了很多资料,发现一些教程在获取百度搜索指数的时候,使用的是爬虫技术,通过分析请求参数来获取指数信息。一些教程提出了使用截图进行,然后进行图像识别,那么对于不懂这些技术的小伙伴该怎么进行指数的获取呢?

本文将通过uiautomation来进行获取,学好了这个技术你还可以对桌面系统进行自动化。

什么是uiautomation?

Microsoft UI 自动化是一个辅助功能框架,它使 Windows 应用程序能够提供和使用有关用户界面 (UI) 的编程信息。它提供对桌面上大多数 UI 元素的编程访问。它使辅助技术产品(例如屏幕阅读器)能够向最终用户提供有关 UI 的信息并通过标准输入以外的方式操作 UI。UI 自动化还允许自动化测试脚本与 UI 交互。

具体可以从以下链接中学习:

https://docs.microsoft.com/en-us/dotnet/framework/ui-automation/ui-automation-overview?redirectedfrom=MSDN

当然了先安装:

pip install uiautomation

这个uiautomation库并不是官方的,而是一个作者自己封装的。感谢这位作者,大家可以从这个链接学习:

https://github.com/yinkaisheng/Python-UIAutomation-for-Windows/

浏览器的启动

由于我们是要基于UI来进行数据的获取的,如果这个应用程序不是使用微软提供的标准控件来实现的就不能使用uiautomation,也就是说不支持UI框架应用程序是不能使用Uiautomation了,比如 Chrome和基于Electron开发的应用程序。但是也有解决办法:启动时添加参数--force-renderer-accessibility才能支持UIAutomation。

这里我们启动Chrome并在百度搜索指数网址:

那么如何找到这个搜索框的位置和“开始搜索”的按钮呢?

我们可以借助一个工具inspect.exe去寻找,双击这个程序之后,我们找到这个输入框:

借助inspect可以看出当前页面的程序控件信息,如上图可以看出,其Name为"请输入您想查询的关键词",ControlType为UIA_EditControlTypeId,所以可以使用以下代码实现我们的功能了,代码中没有进行控件查找超时的异常处理,大家可以自己添加。

import subprocess
import uiautomation as autodef show_index_window():print('root Control:', auto.GetRootControl())chromePath = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"url = r'https://index.baidu.com/v2/index.html#/'parameter = '--force-renderer-accessibility'startmax = '-start-maximized'run_cmd = chromePath + ' ' + url + ' ' + parameter + ' ' + startmaxsubprocess.Popen(run_cmd)mainWindow = auto.DocumentControl(ClassName='Chrome_RenderWidgetHostHWND')if mainWindow.Name == '百度指数':print('open success')# 输入"特斯拉"并点击"开始探索按钮"edit = auto.EditControl(mainWindow, Name='请输入您想查询的关键词')try:edit.SendKeys('特斯拉')# editConttol.GetPattern(auto.PatternId.ValuePattern).SetValue('特斯拉')except LookupError as ex:return "find control time out "# 点击按钮# time.sleep(1)textControl = auto.TextControl(mainWindow, Name='开始探索')try:print(textControl.Name)except LookupError as ex:return "find control time out "rect = textControl.BoundingRectangleprint(rect)left = rect.lefttop = rect.topright = rect.rightbottom = rect.bottom# 进行点击# 作差取得控件中间位置也可auto.Click(left + 10, top + 10)

这样就自动进入到“特斯拉”百度指数详情界面。

接下来我们就来提取其中的搜索指数数字信息。

提取指数信息

通过inspect发现搜索指数信息的控件是图像类型的即,ControlType为ImageControl。因此打开开发者模式是无法提取到的。但是我们又需要里面的信息,我们这样来操作:

因为这些数字是通过悬浮窗口才显示的,我的做法是这样的:先运行程序:

python D:\Python\Python38\Scripts\automation.py -t 8

然后切换到指数界面,将鼠标移动图像曲线开始处的位置上比如2021-06-18那天的指数数据(也不一定是曲线)显示指数信息上图所示。然后可以在automation.py同一目录出现控件信息文件@AutomationLog.txt。在这个控件信息文件中我们找到目标:

可以看出,目标数值24653就显示出来了:

那么怎么将鼠标移动到开始的位置,很简单。先获取控件然后获取属性BoundingRectangle即可,跟上述点击“开始探索”按钮一样。这里留给读者自己实现。在不能直接获取到目标控件的时候,可以先获取某一个元素,比如“新闻头条”等控件,然后获取其父元素,在获取子元素。

接下来我们就通过“新闻头条”控件来获取目标信息:

代码如下:

# -*- coding: utf-8 -*-
import time
import uiautomation as autodef get_index_baidu():mainWindow = auto.PaneControl(ClassName='Chrome_WidgetWin_1')if mainWindow.Exists(3,1):handle = mainWindow.NativeWindowHandle# auto.SetWindowTopmost(handle, 'True')# auto.SwitchToThisWindow(handle)auto.ShowWindow(handle, auto.SW.Maximize)news = auto.ListItemControl(mainWindow, Name = '新闻头条')try:print('news:',news)# editConttol.GetPattern(auto.PatternId.ValuePattern).SetValue('特斯拉')except LookupError as ex:return "find control time out"# 获取父元素f_new = news.GetParentControl()ff_new = f_new.GetParentControl()# 下一元素target = ff_new.GetNextSiblingControl()# 第一个子元素target_z = target.GetChildren()[0]# 等待元素加载"""这里调用鼠标移动到曲线上。如果想要自动化,则需要获取内置控件的信息,然后通过坐标来移动。"""# 这里等待移动鼠标到曲线上time.sleep(2)f_target_z = target_z.GetChildren()[1]target_son = f_target_z.GetChildren()for each in target_son:text_control = each.GetChildren()[0]print(text_control.Name)

输出结果如下:

2021-07-08 星期四

特斯拉

105,777

成功获取

总结

UIautomation在自动化方面有着很广泛的应用,不仅可以对浏览器自动化而且还可以对一些可视化界面进行自动化。

网上的资料也不是很多,大家可以对源码研究来进行更深的学习,当然了还得多实践。

最近有啥书?

Excel图表应用大全(高级卷):本书在《Excel图表应用大全(基础卷)》的基础上,讲解了使用函数、切片器、窗体控件、VBA编程、PowerBI等多种方法制作动态图表,以及使用“九步法”创建数据可视化分析系统。点击即可查看详情!????



推荐阅读
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了如何通过conda安装Selenium的wheel文件,包括查看环境、卸载旧版本、下载新版本的wheel文件以及安装操作的步骤。同时提供了使用清华源的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
author-avatar
悟哩兰荷_982
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有