百度指数感想
一、百度指數的發現
首先,我們先進入百度指數的官網:https://index.baidu.com/,如下圖所示:
?
經過進入百度指數發現百度指數并沒有公開的API可以獲取,因為百度似乎在有意的增加百度指數的抓取難度. 返回的數據進行了加密,并且數據并不直接出現在頁面上.javascript把加密的數據直接變成了頁面上看到的圖形。比如我輸入世界杯,就會出現指數的格式如下圖所示:
1、考慮能否直接采用抓取html協議
直接通過get或者post參數來獲取百度指數的返回頁面,然后用網頁DOM模型提取對應標簽數據,或者用正則表達式來提取。然后這種方法是行不通的,要不然誰都可以去拿了,就不需要我們這么費勁了,,真的夠可以的,看來百度真會玩哦。。。但是我相信一定可以解決這個會玩的家伙,嘻哈。
既然她是一個圖片,那我們就使用可以破解圖片(也就是識別圖片的方法來試一下,要是可以那就更好了,要是不可以,也不需要gg,路是慢慢的探索的)
好了,回歸正題,聽說Tesseract OCR框架可以識別圖片耶,真的還是假的,都說是聽說啦,肯定需要試一下,才知道是真的還是假的了。
首先,肯定需要安裝很多需要的庫拉。
谷歌圖像識別Tesseract OCR需要很多庫,首先是
pip install pillow
pip install pyocr
因為涉及到模擬點擊,肯定需要安裝火狐瀏覽器或者谷歌瀏覽器
首先安裝selenium (2.53.6) 這個版本最好是這個的以下,否則火狐瀏覽需要安裝多一點東西,很麻煩的。(再提示一下,火狐也是最好是4.6得版本)
如果是安裝谷歌的話,那就需要再安裝一個插件chromedriver.exe.
2、進行實戰
首先要進行模擬登陸百度,所以就必須要密碼和賬號,然后手動輸入驗證碼。
百度模擬登陸:
from selenium import webdriver import time url = "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" browser=webdriver.Firefox() browser.get(url) browser.find_element_by_id("TANGRAM__PSP_3__userName").clear() browser.find_element_by_id("TANGRAM__PSP_3__password").clear() username="xxxx" password="xxxx" browser.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(username) browser.find_element_by_id("TANGRAM__PSP_3__password").send_keys(password) browser.find_element_by_id("TANGRAM__PSP_3__submit").click() select = input("請觀察瀏覽器網站是否已經登陸(y/n):") while 1:if select == "y" or select == "Y":print("登陸成功!")print("準備打開新的窗口...")# time.sleep(1)# browser.quit()breakelif select == "n" or select == "N":selectno = input("賬號密碼錯誤請按0,驗證碼出現請按1...")# 賬號密碼錯誤則重新輸入if selectno == "0":# 找到id="TANGRAM__PSP_3__userName"的對話框# 清空輸入框browser.find_element_by_id("TANGRAM__PSP_3__userName").clear()browser.find_element_by_id("TANGRAM__PSP_3__password").clear()browser.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(username)browser.find_element_by_id("TANGRAM__PSP_3__password").send_keys(password)# 點擊登陸sign in# id="TANGRAM__PSP_3__submit"browser.find_element_by_id("TANGRAM__PSP_3__submit").click()elif selectno == "1":# 驗證碼的id為id="ap_captcha_guess"的對話框input("請在瀏覽器中輸入驗證碼并登陸...")select = input("請觀察瀏覽器網站是否已經登陸(y/n):")else:print("請輸入“y”或者“n”!")select = input("請觀察瀏覽器網站是否已經登陸(y/n):")?進入百度主頁之后就打開一個新的頁面,也就是百度指數的頁面,鏈接:
http://index.baidu.com進入輸入關鍵詞和點擊事件的完成為:
js = 'window.open("http://index.baidu.com");' browser.execute_script(js) # 新窗口句柄切換,進入百度指數 # 獲得當前打開所有窗口的句柄handles # handles為一個數組 handles = browser.window_handles print(handles) # 切換到當前最新打開的窗口 browser.switch_to_window(handles[-1]) browser.find_element_by_id("schword").clear() browser.find_element_by_id("schword").send_keys('世界杯') browser.find_element_by_id("searchWords").click()?登陸進去指數的頁面如下:
頓時好像笑呀,哈哈哈!接下來才是任務艱巨的時刻!更多精彩敬請期待!
?
12/19:
進入指數主頁面之后,就可以看到天數?
?
然后根據個人需要去自己選擇所需要的天數,實現如下:
sel = int(input("查詢7天請按0,30天請按1,90天請按2,半年請按3:")) day = 0 if sel == 0:day = 7 elif sel == 1:day = 30 elif sel == 2:day = 90 elif sel == 3:day = 180?找到需要坐標的東西啦啦啦。。。
當你點擊你需要的天數的時候,就會出現你想要如下的信息:
所以,如果這個不出來,一切都是浮云。可是不知道為什么第一次刷新出來之后,后來都不可以了呢?難道真的就要gg了嗎?哭暈在廁所了的日子應該不遠了。
主要獲取這個之后,我們就可以獲取到這個坐標了,然后就可以進行好好的玩耍了。
這個主要是通過鼠標的轉移就會加載出來的啦。
?點擊每一個點的時候就會出現指數的對應的圖片,如圖所示:
接下來就是激動人心的時刻到了,
既然圖片出來了,那就進行 識別吧!通過pytesseract去識別數字(注意:可能會存在識別不準確的原因,但是沒有辦法,這是寶寶想的目前可以實現的辦法了)
# 圖像識別 index = [] image = Image.open(str(path) + "zoom.jpg") code = pytesseract.image_to_string(image) if code:index.append(code)識別出來的數字就存在一個列表里面,然后就進行存放數據庫 ,demo大概完成。
?感想一下:由于近段時間太多事情忙,做了這個都是一些瑣碎的時間,就靠平常的一些靈感去獲取,可能結果不如我想像的那樣子,每次做完一個東西的記錄下來的感覺很好,我以后會不斷更新我的學到的一些東西,敬請期待。
轉載于:https://www.cnblogs.com/caicaihong/p/6252162.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: C# I/O
- 下一篇: 最快让你上手ReactiveCocoa之