百度指数感想
一、百度指數(shù)的發(fā)現(xiàn)
首先,我們先進(jìn)入百度指數(shù)的官網(wǎng):https://index.baidu.com/,如下圖所示:
?
經(jīng)過進(jìn)入百度指數(shù)發(fā)現(xiàn)百度指數(shù)并沒有公開的API可以獲取,因?yàn)榘俣人坪踉谟幸獾脑黾影俣戎笖?shù)的抓取難度. 返回的數(shù)據(jù)進(jìn)行了加密,并且數(shù)據(jù)并不直接出現(xiàn)在頁面上.javascript把加密的數(shù)據(jù)直接變成了頁面上看到的圖形。比如我輸入世界杯,就會(huì)出現(xiàn)指數(shù)的格式如下圖所示:
1、考慮能否直接采用抓取html協(xié)議
直接通過get或者post參數(shù)來獲取百度指數(shù)的返回頁面,然后用網(wǎng)頁DOM模型提取對(duì)應(yīng)標(biāo)簽數(shù)據(jù),或者用正則表達(dá)式來提取。然后這種方法是行不通的,要不然誰都可以去拿了,就不需要我們這么費(fèi)勁了,,真的夠可以的,看來百度真會(huì)玩哦。。。但是我相信一定可以解決這個(gè)會(huì)玩的家伙,嘻哈。
既然她是一個(gè)圖片,那我們就使用可以破解圖片(也就是識(shí)別圖片的方法來試一下,要是可以那就更好了,要是不可以,也不需要gg,路是慢慢的探索的)
好了,回歸正題,聽說Tesseract OCR框架可以識(shí)別圖片耶,真的還是假的,都說是聽說啦,肯定需要試一下,才知道是真的還是假的了。
首先,肯定需要安裝很多需要的庫拉。
谷歌圖像識(shí)別Tesseract OCR需要很多庫,首先是
pip install pillow
pip install pyocr
因?yàn)樯婕暗侥M點(diǎn)擊,肯定需要安裝火狐瀏覽器或者谷歌瀏覽器
首先安裝selenium (2.53.6) 這個(gè)版本最好是這個(gè)的以下,否則火狐瀏覽需要安裝多一點(diǎn)東西,很麻煩的。(再提示一下,火狐也是最好是4.6得版本)
如果是安裝谷歌的話,那就需要再安裝一個(gè)插件chromedriver.exe.
2、進(jìn)行實(shí)戰(zhàn)
首先要進(jìn)行模擬登陸百度,所以就必須要密碼和賬號(hào),然后手動(dòng)輸入驗(yàn)證碼。
百度模擬登陸:
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("請(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()breakelif 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()browser.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(username)browser.find_element_by_id("TANGRAM__PSP_3__password").send_keys(password)# 點(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):")?進(jìn)入百度主頁之后就打開一個(gè)新的頁面,也就是百度指數(shù)的頁面,鏈接:
http://index.baidu.com進(jìn)入輸入關(guān)鍵詞和點(diǎn)擊事件的完成為:
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]) browser.find_element_by_id("schword").clear() browser.find_element_by_id("schword").send_keys('世界杯') browser.find_element_by_id("searchWords").click()?登陸進(jìn)去指數(shù)的頁面如下:
頓時(shí)好像笑呀,哈哈哈!接下來才是任務(wù)艱巨的時(shí)刻!更多精彩敬請(qǐng)期待!
?
12/19:
進(jìn)入指數(shù)主頁面之后,就可以看到天數(shù)?
?
然后根據(jù)個(gè)人需要去自己選擇所需要的天數(shù),實(shí)現(xiàn)如下:
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?找到需要坐標(biāo)的東西啦啦啦。。。
當(dāng)你點(diǎn)擊你需要的天數(shù)的時(shí)候,就會(huì)出現(xiàn)你想要如下的信息:
所以,如果這個(gè)不出來,一切都是浮云。可是不知道為什么第一次刷新出來之后,后來都不可以了呢?難道真的就要gg了嗎?哭暈在廁所了的日子應(yīng)該不遠(yuǎn)了。
主要獲取這個(gè)之后,我們就可以獲取到這個(gè)坐標(biāo)了,然后就可以進(jìn)行好好的玩耍了。
這個(gè)主要是通過鼠標(biāo)的轉(zhuǎn)移就會(huì)加載出來的啦。
?點(diǎn)擊每一個(gè)點(diǎn)的時(shí)候就會(huì)出現(xiàn)指數(shù)的對(duì)應(yīng)的圖片,如圖所示:
接下來就是激動(dòng)人心的時(shí)刻到了,
既然圖片出來了,那就進(jìn)行 識(shí)別吧!通過pytesseract去識(shí)別數(shù)字(注意:可能會(huì)存在識(shí)別不準(zhǔn)確的原因,但是沒有辦法,這是寶寶想的目前可以實(shí)現(xiàn)的辦法了)
# 圖像識(shí)別 index = [] image = Image.open(str(path) + "zoom.jpg") code = pytesseract.image_to_string(image) if code:index.append(code)識(shí)別出來的數(shù)字就存在一個(gè)列表里面,然后就進(jìn)行存放數(shù)據(jù)庫 ,demo大概完成。
?感想一下:由于近段時(shí)間太多事情忙,做了這個(gè)都是一些瑣碎的時(shí)間,就靠平常的一些靈感去獲取,可能結(jié)果不如我想像的那樣子,每次做完一個(gè)東西的記錄下來的感覺很好,我以后會(huì)不斷更新我的學(xué)到的一些東西,敬請(qǐng)期待。
轉(zhuǎn)載于:https://www.cnblogs.com/caicaihong/p/6252162.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: C# I/O
- 下一篇: 最快让你上手ReactiveCocoa之