<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 教你如何批量獲取百度指數(shù)

          共 6952字,需瀏覽 14分鐘

           ·

          2021-07-29 01:36

          百度指數(shù)搜索指數(shù)是以網(wǎng)民在百度的搜索量為數(shù)據(jù)基礎(chǔ),以關(guān)鍵詞為統(tǒng)計對象,學(xué)分析并計算出各個關(guān)鍵詞在百度網(wǎng)頁搜索中搜索頻次的加權(quán)和。其在研究關(guān)鍵詞搜索趨勢、洞察網(wǎng)民需求變化、監(jiān)測媒體輿情趨勢、定位數(shù)字消費者特征方面有重要的作用。

          之前我們還戲稱百度指數(shù)才是百度的良心之作!

          如果想要批量獲取一些字段的百度指數(shù)時,就涉及數(shù)據(jù)獲取啦。

          我查詢了很多資料,發(fā)現(xiàn)一些教程在獲取百度搜索指數(shù)的時候,使用的是爬蟲技術(shù),通過分析請求參數(shù)來獲取指數(shù)信息。一些教程提出了使用截圖進行,然后進行圖像識別,那么對于不懂這些技術(shù)的小伙伴該怎么進行指數(shù)的獲取呢?

          本文將通過uiautomation來進行獲取,學(xué)好了這個技術(shù)你還可以對桌面系統(tǒng)進行自動化。

          什么是uiautomation?

          Microsoft UI 自動化是一個輔助功能框架,它使 Windows 應(yīng)用程序能夠提供和使用有關(guān)用戶界面 (UI) 的編程信息。它提供對桌面上大多數(shù) UI 元素的編程訪問。它使輔助技術(shù)產(chǎn)品(例如屏幕閱讀器)能夠向最終用戶提供有關(guān) UI 的信息并通過標準輸入以外的方式操作 UI。UI 自動化還允許自動化測試腳本與 UI 交互。

          具體可以從以下鏈接中學(xué)習(xí):

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

          當(dāng)然了先安裝:

          pip install uiautomation

          這個uiautomation庫并不是官方的,而是一個作者自己封裝的。感謝這位作者,大家可以從這個鏈接學(xué)習(xí):

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

          瀏覽器的啟動

          由于我們是要基于UI來進行數(shù)據(jù)的獲取的,如果這個應(yīng)用程序不是使用微軟提供的標準控件來實現(xiàn)的就不能使用uiautomation,也就是說不支持UI框架應(yīng)用程序是不能使用Uiautomation了,比如 Chrome和基于Electron開發(fā)的應(yīng)用程序。但是也有解決辦法:啟動時添加參數(shù)--force-renderer-accessibility才能支持UIAutomation。

          這里我們啟動Chrome并在百度搜索指數(shù)網(wǎng)址:

          那么如何找到這個搜索框的位置和“開始搜索”的按鈕呢?

          我們可以借助一個工具inspect.exe去尋找,雙擊這個程序之后,我們找到這個輸入框:

          借助inspect可以看出當(dāng)前頁面的程序控件信息,如上圖可以看出,其Name為"請輸入您想查詢的關(guān)鍵詞",ControlType為UIA_EditControlTypeId,所以可以使用以下代碼實現(xiàn)我們的功能了,代碼中沒有進行控件查找超時的異常處理,大家可以自己添加。

          import subprocess
          import uiautomation as auto

          def 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 + ' ' + startmax
              subprocess.Popen(run_cmd)
              mainWindow = auto.DocumentControl(ClassName='Chrome_RenderWidgetHostHWND')
              if mainWindow.Name == '百度指數(shù)':
                  print('open success')

              # 輸入"特斯拉"并點擊"開始探索按鈕"
              edit = auto.EditControl(mainWindow, Name='請輸入您想查詢的關(guān)鍵詞')
              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.BoundingRectangle
              print(rect)
              left = rect.left
              top = rect.top
              right = rect.right
              bottom = rect.bottom
              # 進行點擊
              # 作差取得控件中間位置也可
              auto.Click(left + 10, top + 10)

          這樣就自動進入到“特斯拉”百度指數(shù)詳情界面。

          接下來我們就來提取其中的搜索指數(shù)數(shù)字信息。

          提取指數(shù)信息

          通過inspect發(fā)現(xiàn)搜索指數(shù)信息的控件是圖像類型的即,ControlType為ImageControl。因此打開開發(fā)者模式是無法提取到的。但是我們又需要里面的信息,我們這樣來操作:

          因為這些數(shù)字是通過懸浮窗口才顯示的,我的做法是這樣的:先運行程序:

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

          然后切換到指數(shù)界面,將鼠標移動圖像曲線開始處的位置上比如2021-06-18那天的指數(shù)數(shù)據(jù)(也不一定是曲線)顯示指數(shù)信息上圖所示。然后可以在automation.py同一目錄出現(xiàn)控件信息文件@AutomationLog.txt。在這個控件信息文件中我們找到目標:

          可以看出,目標數(shù)值24653就顯示出來了:

          那么怎么將鼠標移動到開始的位置,很簡單。先獲取控件然后獲取屬性BoundingRectangle即可,跟上述點擊“開始探索”按鈕一樣。這里留給讀者自己實現(xiàn)。在不能直接獲取到目標控件的時候,可以先獲取某一個元素,比如“新聞頭條”等控件,然后獲取其父元素,在獲取子元素。

          接下來我們就通過“新聞頭條”控件來獲取目標信息:

          代碼如下:

          # -*- coding: utf-8 -*-
          import time
          import uiautomation as auto

          def 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]
              # 等待元素加載
              """
              這里調(diào)用鼠標移動到曲線上。
              如果想要自動化,則需要獲取內(nèi)置控件的信息,然后通過坐標來移動。
              """

              # 這里等待移動鼠標到曲線上
              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)

          輸出結(jié)果如下:

          2021-07-08 星期四

          特斯拉

          105,777

          成功獲取

          總結(jié)

          UIautomation在自動化方面有著很廣泛的應(yīng)用,不僅可以對瀏覽器自動化而且還可以對一些可視化界面進行自動化。

          網(wǎng)上的資料也不是很多,大家可以對源碼研究來進行更深的學(xué)習(xí),當(dāng)然了還得多實踐。

          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關(guān)注Python實用寶典。

          有任何問題,可以在公眾號后臺回復(fù):加群,回答相應(yīng)紅字驗證信息,進入互助群詢問。

          原創(chuàng)不易,希望你能在下面點個贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點擊下方閱讀原文可獲得更好的閱讀體驗

          Python實用寶典 (pythondict.com)
          不只是一個寶典
          歡迎關(guān)注公眾號:Python實用寶典

          瀏覽 113
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜色AV8888 | 国产一级做a爱免费视频 | 自慰精品| 自拍超逼| 中文字幕一区二区三区乱码视频 |