Springboot與Selenium合體變蜘蛛爬企查查


最近工作上需要一些企業(yè)的詳細(xì)的數(shù)據(jù)线得,工商信息啦饶唤,基本信息啦,還有一些關(guān)系圖(投資關(guān)系贯钩、人物圖譜)之類的,然后我來負(fù)責(zé)從企查查上弄些數(shù)據(jù)。

強(qiáng)調(diào):下面只是快速實(shí)現(xiàn)數(shù)據(jù)抓取的思路角雷,沒有詳細(xì)的代碼祸穷,同時也拒絕伸手黨。

現(xiàn)實(shí)中勺三,一些工商信息網(wǎng)站會被無數(shù)的爬蟲“騷擾”雷滚,所以網(wǎng)站的反爬蟲策略也是越來越高,就拿企查查來說吗坚,基本的信息是直接可訪問的祈远,但是像人物圖譜企業(yè)圖譜這些內(nèi)容還是需要登錄的,
特別是人物圖譜商源,非VIP會員车份,一天也只能看兩次


企查查的登錄也是做了很多限制
比如圖片驗(yàn)證碼啊,數(shù)字驗(yàn)證碼啊牡彻,還有驗(yàn)證碼異常出現(xiàn)刷新按鈕啊等等(之前在做的過程中發(fā)現(xiàn)的沒有及時截圖)
5.png

但是有了selenium這些都不是問題~接下來按照如下思維導(dǎo)圖做一個抓取的分析(代碼想了許久還是不貼出來了)
企查查.png

登錄

滑塊驗(yàn)證

首先出場的是滑塊驗(yàn)證扫沼,這個可以使用Selenium中的Actions.clickAndHold()來破防,打開瀏覽器Element面板庄吼,邊滑動滑塊邊觀察Html

這說明滑塊不只是單純的移動到右側(cè)缎除,還導(dǎo)致其他樣式改變,這也說明你不能直接通過修改Html的方式改變滑塊的位置來驗(yàn)證 总寻,Ps:有的網(wǎng)站只要滑塊在最終的位置器罐,就認(rèn)為驗(yàn)證通過了。
使用java和selenium模擬滑動滑塊

WebElement dragger = driver.findElement(By.cssSelector("#nc_1_n1z"));
Actions action = new Actions(driver);
action.clickAndHold(dragger).build().perform();
for (int i = 0; i < target; i++) {
    try {
        action.moveByOffset(offset, 0).perform();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

target 和 offset 的值自己去口算一下~

圖片型驗(yàn)證碼

不知為何渐行,我每次用代碼模擬滑塊的時候頁面都會彈出圖片型驗(yàn)證碼技矮,而人工滑動卻不要,這讓我很費(fèi)解殊轴。
一般像圖片型驗(yàn)證碼和數(shù)字型驗(yàn)證碼有的人可能會自己去研究算法來解決衰倦,什么機(jī)器學(xué)習(xí)啦,深度學(xué)習(xí)啦等等旁理。這里不要這么高深的樊零,統(tǒng)統(tǒng)用打碼平臺,用法和價格自行百度孽文,可以這樣理解:你通過Http的方式提交圖片和要求驻襟,平臺會返回給你相應(yīng)的結(jié)果。如數(shù)字啦芋哭、文字的坐標(biāo)啦沉衣、多個文字的坐標(biāo)等等。
仔細(xì)分析下面的截圖所對應(yīng)的的Element


我們可以看出驗(yàn)證要求在青色橫條中减牺,而目標(biāo)文字在下面的方塊中豌习,這是兩個不同的Element存谎,而打碼平臺的要求是給他一張完整的圖片,這個當(dāng)時我想都沒想肥隆,立即決定使用selenium截圖的方式將橫條和方塊分別保存下來既荚,然后通過代碼將其拼接為一張圖片,最后將一整張圖提交給打碼平臺。如下
waitProcessImg.png

然后平臺會返回給你一個坐標(biāo)如(x,y)栋艳,剛剛提到了方塊圖他是單獨(dú)的一個Element恰聘,所以目標(biāo)y還要減去橫條的高度即(x,y-34),這個時候你以為搞定了?NoNoNo!通過瀏覽器的定位元素吸占,可以看到
QQ截圖20180109094227.png

方塊所在的Elemnt 有個樣式margin-left晴叨,所以我們還要減去這個值,即最終的最標(biāo)為(x + 2, y - 34)為什么是2而不是10矾屯,這個是因?yàn)槲覈L試了很多次兼蕊,發(fā)現(xiàn)2才可以。问拘。遍略。
好了接下來就是根據(jù)坐標(biāo)去點(diǎn)擊,要用到這個方法:

Actions action = new Actions(driver);
action.moveToElement(bodyImgEle, x + 2, y - 34).click().perform();

這里注意下骤坐,moveToElement是以element的左上角為原點(diǎn)绪杏,往右是X,往下是Y

數(shù)字驗(yàn)證碼

(沒有截圖纽绍,只有代碼截的圖)


這樣的就很普通了蕾久,我們依然交給打碼平臺,通過使用返回的“MV9C”來通過此驗(yàn)證拌夏。

異常刷新

(這個也沒有截圖)出現(xiàn)這種情況我猜測是企查查檢測到你這邊頻繁的登錄或驗(yàn)證僧著,形式就是滑動條上出現(xiàn)了“刷新”超鏈接,這個只要定為到“刷新”Element障簿,點(diǎn)擊一下就ok盹愚,如下

WebElement err = reloadElement.findElement(By.cssSelector("#dom_id_one > div > span > a"));
err.click();

注意:登錄的過程中每一個驗(yàn)證都可能有失敗的情況,所以每個處理最好加上一個循環(huán)站故,直到驗(yàn)證通過再跳出循環(huán)進(jìn)入下一步操作

抓取數(shù)據(jù)

這里重點(diǎn)講企業(yè)詳情頁
對于企查查來說只要登錄這塊搞定了皆怕,其他數(shù)據(jù)不是問題,就是簡單的分析下每個數(shù)據(jù)的請求地址西篓,然后用selenium模擬請求就行了愈腾。

人物圖譜

URL:http://www.qichacha.com/company_opercorview?name=馬化騰&personId=p03cf330a686332cfe9cb8f36a8f3ab8&keyno=f1c5372005e04ba99175d5fd3db7b8fc

投資圖譜

URL:http://www.qichacha.com/company_relation?keyNo=f1c5372005e04ba99175d5fd3db7b8fc&name=深圳市騰訊計算機(jī)系統(tǒng)有限公司

很直觀的就能看到請求地址,然后將返回的JSON字符串處理一下岂津,就得到了你想要的數(shù)據(jù)
這里不做太多的贅述虱黄。

貼個控制臺的圖

總結(jié)

總的來講企查查的網(wǎng)站相對于天眼查還是比較容易突破的,只要把登錄這塊完美處理好吮成,其他就是解析上的問題了橱乱。
話說企查查并沒有對訪問IP做限制處理鸳君,只是如果用一個賬號訪問次數(shù)太多之后谬俄,中間也會出現(xiàn)滑塊認(rèn)證杂曲,但是不要擔(dān)心昼钻,你可以把登錄那塊的驗(yàn)證邏輯直接搬過來即可魔种,你敢信析二?

爬蟲不是我的主要工作,我只是對數(shù)據(jù)抓取這塊比較感興趣节预,還有在工作中有些數(shù)據(jù)需要抓取叶摄,所以我也就擔(dān)當(dāng)了半個爬蟲的角色,最近自己在使用jsoup寫一個簡易爬蟲框架(參照webmagic)安拟,有興趣得可持續(xù)關(guān)注我蛤吓,如果有必要的話,我會寫一些爬蟲教程糠赦,讓小白變大白(●—●)綽綽有余

CSDN:http://blog.csdn.net/qqhjqs?viewmode=list
博客:http://vector4wang.tk/
簡書:http://www.reibang.com/u/223a1314e818
Github:https://github.com/vector4wang

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末会傲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拙泽,更是在濱河造成了極大的恐慌淌山,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顾瞻,死亡現(xiàn)場離奇詭異泼疑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荷荤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門退渗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人会油,你說我怎么就攤上這事」琶” “怎么了翻翩?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵喇潘,是天一觀的道長体斩。 經(jīng)常有香客問我,道長颖低,這世上最難降的妖魔是什么絮吵? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮忱屑,結(jié)果婚禮上蹬敲,老公的妹妹穿的比我還像新娘暇昂。我一直安慰自己,他們只是感情好伴嗡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布急波。 她就那樣靜靜地躺著,像睡著了一般瘪校。 火紅的嫁衣襯著肌膚如雪澄暮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天阱扬,我揣著相機(jī)與錄音泣懊,去河邊找鬼。 笑死麻惶,一個胖子當(dāng)著我的面吹牛馍刮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窃蹋,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼卡啰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了警没?” 一聲冷哼從身側(cè)響起匈辱,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惠奸,沒想到半個月后梅誓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛南,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年梗掰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗅回。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡及穗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绵载,到底是詐尸還是另有隱情埂陆,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布娃豹,位于F島的核電站焚虱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏懂版。R本人自食惡果不足惜鹃栽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躯畴。 院中可真熱鬧民鼓,春花似錦薇芝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饮亏,卻和暖如春耍贾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背克滴。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工逼争, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留优床,地道東北人劝赔。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像胆敞,于是被迫代替她去往敵國和親着帽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353