最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解python3百度指數(shù)抓取實(shí)例

 更新時(shí)間:2016年12月12日 11:05:14   作者:TTyb  
本篇文章主要介紹了python3百度指數(shù)抓取,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

百度指數(shù)抓取,再用圖像識(shí)別得到指數(shù)

前言:

土福曾說(shuō),百度指數(shù)很難抓,在淘寶上面是20塊1個(gè)關(guān)鍵字:

哥那么叼的人怎么會(huì)被他嚇到,于是乎花了零零碎碎加起來(lái)大約2天半搞定,在此鄙視一下土福

安裝的庫(kù)很多:

谷歌圖像識(shí)別tesseract-ocr

pip3 install pillow

pip3 install pyocr

selenium2.45

Chrome47.0.2526.106 m or Firebox32.0.1

chromedriver.exe

圖像識(shí)別驗(yàn)證碼請(qǐng)參考:http://m.fzitv.net/article/92287.htm

selenium用法請(qǐng)參考:http://m.fzitv.net/article/52329.htm

進(jìn)入百度指數(shù)需要登陸,登陸的賬號(hào)密碼寫在文本account里面:

萬(wàn)能登陸代碼如下:

# 打開瀏覽器
def openbrowser():
  global browser

  # https://passport.baidu.com/v2/?login
  url = "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F"
  # 打開谷歌瀏覽器
  # Firefox()
  # Chrome()
  browser = webdriver.Chrome()
  # 輸入網(wǎng)址
  browser.get(url)
  # 打開瀏覽器時(shí)間
  # print("等待10秒打開瀏覽器...")
  # time.sleep(10)

  # 找到id="TANGRAM__PSP_3__userName"的對(duì)話框
  # 清空輸入框
  browser.find_element_by_id("TANGRAM__PSP_3__userName").clear()
  browser.find_element_by_id("TANGRAM__PSP_3__password").clear()

  # 輸入賬號(hào)密碼
  # 輸入賬號(hào)密碼
  account = []
  try:
    fileaccount = open("../baidu/account.txt")
    accounts = fileaccount.readlines()
    for acc in accounts:
      account.append(acc.strip())
    fileaccount.close()
  except Exception as err:
    print(err)
    input("請(qǐng)正確在account.txt里面寫入賬號(hào)密碼")
    exit()
  browser.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(account[0])
  browser.find_element_by_id("TANGRAM__PSP_3__password").send_keys(account[1])

  # 點(diǎn)擊登陸登陸
  # id="TANGRAM__PSP_3__submit"
  browser.find_element_by_id("TANGRAM__PSP_3__submit").click()

  # 等待登陸10秒
  # print('等待登陸10秒...')
  # time.sleep(10)
  print("等待網(wǎng)址加載完畢...")

  select = input("請(qǐng)觀察瀏覽器網(wǎng)站是否已經(jīng)登陸(y/n):")
  while 1:
    if select == "y" or select == "Y":
      print("登陸成功!")
      print("準(zhǔn)備打開新的窗口...")
      # time.sleep(1)
      # browser.quit()
      break

    elif select == "n" or select == "N":
      selectno = input("賬號(hào)密碼錯(cuò)誤請(qǐng)按0,驗(yàn)證碼出現(xiàn)請(qǐng)按1...")
      # 賬號(hào)密碼錯(cuò)誤則重新輸入
      if selectno == "0":

        # 找到id="TANGRAM__PSP_3__userName"的對(duì)話框
        # 清空輸入框
        browser.find_element_by_id("TANGRAM__PSP_3__userName").clear()
        browser.find_element_by_id("TANGRAM__PSP_3__password").clear()

        # 輸入賬號(hào)密碼
        account = []
        try:
          fileaccount = open("../baidu/account.txt")
          accounts = fileaccount.readlines()
          for acc in accounts:
            account.append(acc.strip())
          fileaccount.close()
        except Exception as err:
          print(err)
          input("請(qǐng)正確在account.txt里面寫入賬號(hào)密碼")
          exit()

        browser.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(account[0])
        browser.find_element_by_id("TANGRAM__PSP_3__password").send_keys(account[1])
        # 點(diǎn)擊登陸sign in
        # id="TANGRAM__PSP_3__submit"
        browser.find_element_by_id("TANGRAM__PSP_3__submit").click()

      elif selectno == "1":
        # 驗(yàn)證碼的id為id="ap_captcha_guess"的對(duì)話框
        input("請(qǐng)?jiān)跒g覽器中輸入驗(yàn)證碼并登陸...")
        select = input("請(qǐng)觀察瀏覽器網(wǎng)站是否已經(jīng)登陸(y/n):")

    else:
      print("請(qǐng)輸入“y”或者“n”!")
      select = input("請(qǐng)觀察瀏覽器網(wǎng)站是否已經(jīng)登陸(y/n):")

登陸的頁(yè)面:

登陸過(guò)后需要打開新的窗口,也就是打開百度指數(shù),并且切換窗口,在selenium用:

# 新開一個(gè)窗口,通過(guò)執(zhí)行js來(lái)新開一個(gè)窗口
js = 'window.open("http://index.baidu.com");'
browser.execute_script(js)
# 新窗口句柄切換,進(jìn)入百度指數(shù)
# 獲得當(dāng)前打開所有窗口的句柄handles
# handles為一個(gè)數(shù)組
handles = browser.window_handles
# print(handles)
# 切換到當(dāng)前最新打開的窗口
browser.switch_to_window(handles[-1])

清空輸入框,構(gòu)造點(diǎn)擊天數(shù):

# 清空輸入框
browser.find_element_by_id("schword").clear()
# 寫入需要搜索的百度指數(shù)
browser.find_element_by_id("schword").send_keys(keyword)
# 點(diǎn)擊搜索
# <input type="submit" value="" id="searchWords" onclick="searchDemoWords()">
browser.find_element_by_id("searchWords").click()
time.sleep(2)
# 最大化窗口
browser.maximize_window()
# 構(gòu)造天數(shù)
sel = int(input("查詢7天請(qǐng)按0,30天請(qǐng)按1,90天請(qǐng)按2,半年請(qǐng)按3:"))
day = 0
if sel == 0:
  day = 7
elif sel == 1:
  day = 30
elif sel == 2:
  day = 90
elif sel == 3:
  day = 180
sel = '//a[@rel="' + str(day) + '"]'
browser.find_element_by_xpath(sel).click()
# 太快了
time.sleep(2)

天數(shù)也就是這里:

找到圖形框:

xoyelement = browser.find_elements_by_css_selector("#trend rect")[2]

圖形框就是:

根據(jù)坐標(biāo)點(diǎn)的不同構(gòu)造偏移量:

選取7天的坐標(biāo)來(lái)觀察:

第一個(gè)點(diǎn)的橫坐標(biāo)為1031.66666

第二個(gè)點(diǎn)的橫坐標(biāo)為1234

所以7天兩個(gè)坐標(biāo)之間的差為:202.33,其他的天數(shù)類似

用selenium庫(kù)來(lái)模擬鼠標(biāo)滑動(dòng)懸?。?br />

from selenium.webdriver.common.action_chains import ActionChains
ActionChains(browser).move_to_element_with_offset(xoyelement,x_0,y_0).perform()

但是這樣子確定的點(diǎn)指出是在這個(gè)位置:

也就是矩形的左上角,這里是不會(huì)加載js顯示彈出框的,所以要給橫坐標(biāo)+1:

x_0 = 1
y_0 = 0

寫個(gè)按照天數(shù)的循環(huán),讓橫坐標(biāo)累加:

# 按照選擇的天數(shù)循環(huán)
for i in range(day):
  # 構(gòu)造規(guī)則
  if day == 7:
    x_0 = x_0 + 202.33
  elif day == 30:
    x_0 = x_0 + 41.68
  elif day == 90:
    x_0 = x_0 + 13.64
  elif day == 180:
    x_0 = x_0 + 6.78

鼠標(biāo)橫移時(shí)會(huì)彈出框,在網(wǎng)址里面找到這個(gè)框:

selenium自動(dòng)識(shí)別之...:

# <div class="imgtxt" style="margin-left:-117px;"></div>
imgelement = browser.find_element_by_xpath('//div[@id="viewbox"]')

并且確定這個(gè)框的大小位置:

# 找到圖片坐標(biāo)
locations = imgelement.location
print(locations)
# 找到圖片大小
sizes = imgelement.size
print(sizes)
# 構(gòu)造指數(shù)的位置
rangle = (int(locations['x']), int(locations['y']), int(locations['x'] + sizes['width']),
     int(locations['y'] + sizes['height']))

截取的圖形為:


下面的思路就是:

1.將整個(gè)屏幕截圖下來(lái)

2.打開截圖用上面得到的這個(gè)坐標(biāo)rangle進(jìn)行裁剪

但是最后裁剪出來(lái)的是上面的那個(gè)黑框,我想要的效果是:

 

所以要對(duì)rangle進(jìn)行計(jì)算,但是我懶,忽略了搜索詞的長(zhǎng)度,直接暴力的寫成:

# 構(gòu)造指數(shù)的位置
rangle = (int(locations['x'] + sizes['width']/3), int(locations['y'] + sizes['height']/2), int(locations['x'] + sizes['width']*2/3),
     int(locations['y'] + sizes['height']))

這個(gè)寫法最終不太好,最起碼要對(duì)keyword的長(zhǎng)度進(jìn)行判斷,長(zhǎng)度過(guò)長(zhǎng)會(huì)導(dǎo)致截圖坐標(biāo)出現(xiàn)偏差,反正我知道怎么做,就是不寫出來(lái)給你們看!

后面的完整代碼是:

# <div class="imgtxt" style="margin-left:-117px;"></div>
imgelement = browser.find_element_by_xpath('//div[@id="viewbox"]')
# 找到圖片坐標(biāo)
locations = imgelement.location
print(locations)
# 找到圖片大小
sizes = imgelement.size
print(sizes)
# 構(gòu)造指數(shù)的位置
rangle = (int(locations['x'] + sizes['width']/3), int(locations['y'] + sizes['height']/2), int(locations['x'] + sizes['width']*2/3),
     int(locations['y'] + sizes['height']))
# 截取當(dāng)前瀏覽器
path = "../baidu/" + str(num)
browser.save_screenshot(str(path) + ".png")
# 打開截圖切割
img = Image.open(str(path) + ".png")
jpg = img.crop(rangle)
jpg.save(str(path) + ".jpg")

但是后面發(fā)現(xiàn)裁剪的圖片太小,識(shí)別精度太低,所以需要對(duì)圖片進(jìn)行擴(kuò)大:

# 將圖片放大一倍
# 原圖大小73.29
jpgzoom = Image.open(str(path) + ".jpg")
(x, y) = jpgzoom.size
x_s = 146
y_s = 58
out = jpgzoom.resize((x_s, y_s), Image.ANTIALIAS)
out.save(path + 'zoom.jpg', 'png', quality=95)

原圖大小請(qǐng) 右鍵->屬性->詳細(xì)信息 查看,我的是長(zhǎng)73像素,寬29像素

最后就是圖像識(shí)別

# 圖像識(shí)別
index = []
image = Image.open(str(path) + "zoom.jpg")
code = pytesseract.image_to_string(image)
if code:
  index.append(code)

最后效果圖:

源碼下載:demo

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python連接Oracle數(shù)據(jù)庫(kù)的操作指南

    Python連接Oracle數(shù)據(jù)庫(kù)的操作指南

    Oracle數(shù)據(jù)庫(kù)是一種強(qiáng)大的企業(yè)級(jí)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),而Python是一門流行的編程語(yǔ)言,兩者的結(jié)合可以提供出色的數(shù)據(jù)管理和分析能力,本教程將詳細(xì)介紹如何在Python中連接Oracle數(shù)據(jù)庫(kù),并演示常見的數(shù)據(jù)庫(kù)任務(wù),需要的朋友可以參考下
    2023-11-11
  • Python對(duì)象轉(zhuǎn)換為json的方法步驟

    Python對(duì)象轉(zhuǎn)換為json的方法步驟

    這篇文章主要介紹了Python對(duì)象轉(zhuǎn)換為json的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python 自動(dòng)化處理Excel和Word實(shí)現(xiàn)自動(dòng)辦公

    Python 自動(dòng)化處理Excel和Word實(shí)現(xiàn)自動(dòng)辦公

    毫無(wú)疑問(wèn),Microsoft Excel 和 Word 是我們?nèi)粘^k公中使用最廣泛的辦公軟件。將反復(fù)、復(fù)雜的工作自動(dòng)化處理,是我們需要思考的問(wèn)題,本篇文章幫你解決這個(gè)問(wèn)題
    2021-11-11
  • 淺析Python中嵌套字典的訪問(wèn)與操作

    淺析Python中嵌套字典的訪問(wèn)與操作

    在Python編程中,嵌套字典是一種常見的數(shù)據(jù)結(jié)構(gòu),它可以以層次結(jié)構(gòu)的方式組織和存儲(chǔ)數(shù)據(jù),本文將詳細(xì)介紹如何在Python中訪問(wèn)和操作嵌套字典,需要的可以參考下
    2024-02-02
  • python類和繼承用法實(shí)例

    python類和繼承用法實(shí)例

    這篇文章主要介紹了python類和繼承用法,實(shí)例分析了Python類的定義與繼承的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python實(shí)現(xiàn)過(guò)迷宮小游戲示例詳解

    Python實(shí)現(xiàn)過(guò)迷宮小游戲示例詳解

    這篇文章主要介紹的是基于Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的過(guò)迷宮小游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • Python中列表與元組的乘法操作示例

    Python中列表與元組的乘法操作示例

    這篇文章主要介紹了Python中列表與元組的乘法操作,結(jié)合簡(jiǎn)單實(shí)例形式分析了Python中列表、元組的乘法,并附帶分析了字符串的乘法及元組乘法操作的注意事項(xiàng),需要的朋友可以參考下
    2018-02-02
  • python編程測(cè)試電腦開啟最大線程數(shù)實(shí)例代碼

    python編程測(cè)試電腦開啟最大線程數(shù)實(shí)例代碼

    這篇文章主要介紹了python編程測(cè)試電腦開啟最大線程數(shù)實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • python 匿名函數(shù)與三元運(yùn)算學(xué)習(xí)筆記

    python 匿名函數(shù)與三元運(yùn)算學(xué)習(xí)筆記

    這篇文章主要介紹了python 匿名函數(shù)與三元運(yùn)算的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python 編程,感興趣的朋友可以了解下
    2020-10-10
  • python_tkinter彈出對(duì)話框創(chuàng)建

    python_tkinter彈出對(duì)話框創(chuàng)建

    這篇文章主要介紹了python_tkinter彈出對(duì)話框?qū)崿F(xiàn),tkinter提供了三個(gè)模塊,可以創(chuàng)建彈出對(duì)話窗口,下面詳細(xì)介紹,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-03-03

最新評(píng)論

犍为县| 东至县| 射洪县| 车致| 陆丰市| 伊金霍洛旗| 岗巴县| 青川县| 武定县| 洮南市| 德阳市| 红河县| 安仁县| 辽宁省| 鹿泉市| 博乐市| 千阳县| 旺苍县| 宿松县| 集贤县| 龙胜| 濮阳县| 东乌珠穆沁旗| 恩施市| 三河市| 宜宾县| 固阳县| 杂多县| 巴中市| 海宁市| 信丰县| 福建省| 黄龙县| 康保县| 绥江县| 云霄县| 宁海县| 南雄市| 普洱| 泸溪县| 乐陵市|