PhantomJS+Selenium輕松爬蟲及模擬網(wǎng)頁點(diǎn)擊(附容易踩的坑)

PhantomJS

首先簡單介紹一下PhantomJS宴猾,它是一款沒有界面的瀏覽器圆存,也就是說PhantomJS并不是給普通用戶瀏覽使用,它運(yùn)行時在屏幕上是看不到的仇哆。相較于傳統(tǒng)的界面瀏覽器沦辙,PhantomJS占用的內(nèi)存更少,且大量爬蟲時不會出現(xiàn)滿屏的網(wǎng)頁讹剔,所以你可以一邊悠閑地上上網(wǎng)聊聊天油讯,一般讓爬蟲后臺運(yùn)行。

Selenium

Selenium是一款模擬點(diǎn)擊網(wǎng)頁+爬蟲的插件延欠,一般和PhantomJS結(jié)合使用(也可以使用其他無界面瀏覽器)陌兑。這里啰嗦一下模擬點(diǎn)擊的原理。不同于手機(jī)模點(diǎn)由捎,由于各種電腦的分辨率和網(wǎng)頁打開頁面大小的不同兔综,網(wǎng)頁爬蟲的點(diǎn)擊不是選一個坐標(biāo)點(diǎn),然后給個click事件狞玛,而是分析網(wǎng)頁生成的html代碼软驰,取得某一個元素,如div心肪,方才給與點(diǎn)擊锭亏。

實(shí)戰(zhàn)及注解

說了這么多,下面舉一個簡單的例子讓大家加深印象蒙畴。代碼是用Python寫的贰镣,我會在每一行下面作注解。

----------------

from selenium import webdriver

#將selenium模塊導(dǎo)進(jìn)來

import time

#導(dǎo)入time模塊膳凝,以便之后爬蟲等待

driver=webdriver.PhantomJS()

#引用PhantomJS

driver.set_window_size(1920,1080)

#設(shè)置PhantomJS窗口大小碑隆,因?yàn)闆]有實(shí)體界面,所以大小隨便設(shè)

driver.get("http://lovecrazy.cn")

#輸入要爬的網(wǎng)站地址

driver.find_element_by_id("ls_username").send_keys("測試")

driver.find_element_by_id("ls_password").send_keys("ceshi123")

driver.find_element_by_xpath("http://*[@id='lsform']/div/div/table/tbody/tr[2]/td[3]/button").click()

#以上三行做了輸入賬號密碼及點(diǎn)擊事件蹬音。find_element_by_id()先獲取元素輸入的位置上煤,send_keys()中寫要輸入的內(nèi)容。尋找位置的幾種方法后面詳細(xì)講著淆。

time.sleep(2)//加載新頁面需要時間劫狠,讓瀏覽器先喘口氣拴疤,這里暫且讓它緩2秒

data=driver.find_element_by_xpath("http://*[@id='g_upmine']").text

print(data)

#以上兩行只是個測試,顯示登錄成功后的用戶組独泞。

------------

獲取元素的方法

下面講一下怎么獲取需要點(diǎn)擊或爬取的元素呐矾。這里只說一下萬能方法:

筆者采用Chrome內(nèi)核的瀏覽器。谷歌瀏覽器懦砂,QQ瀏覽器蜒犯,360瀏覽器都可以。打開網(wǎng)頁后Wndows操作系統(tǒng)按F12荞膘,Mac則按option+command+c罚随,也可依次右鍵,檢查羽资。點(diǎn)擊新增界面左上角的鼠標(biāo)箭頭淘菩,再點(diǎn)擊網(wǎng)頁上要查找的元素,右鍵加深代碼屠升,依次選擇Copy潮改,Copy XPATH,最后將代碼粘貼到driver.find_element_by_xpath("")括號中即可(別忘可把貼進(jìn)來代碼里的雙引號改成單引號弥激,否則會報(bào)錯进陡。

非萬能方法耗時間,一般需要查找元素的id微服,class等標(biāo)簽,這里不推薦缨历。

這里有個坑以蕴,你在網(wǎng)頁點(diǎn)開一個鏈接后會發(fā)現(xiàn)獲取不到新頁面的數(shù)據(jù)。這是因?yàn)槿绻c(diǎn)擊后打開了新窗口辛孵,程序獲取的還是老窗口的內(nèi)容丛肮,這里只需加一行driver.switch_to.window(driver.window_handles[1]),方括號中可填0魄缚,1和-1宝与。0代表第一個窗口,1代表最后一個窗口冶匹,-1為當(dāng)前顯示的窗口习劫。

快結(jié)束了

最后說一下獲取爬的內(nèi)容,其實(shí)很簡單嚼隘,只需在driver.find_element_by_xpath("")加.text或.value即可诽里。(print就不用我說了,地球人都知道)

因?yàn)楣ぷ餍枰P者采用PhantomJS+Selenium飞蛹,但是讀者若運(yùn)行我的代碼會發(fā)現(xiàn)谤狡,python給出一行警告(可無視)灸眼,大意是PhantomJS已經(jīng)被開放商放棄了,請用其他無界面瀏覽器墓懂。這次使用這個插件也是嘗試焰宣,其實(shí)無頭瀏覽器大同小異,學(xué)會PhantomJS再使用其他瀏覽器已是輕車熟路了捕仔。后期如果有機(jī)會我會更新Chrome無頭版的爬蟲方式宛徊。

THE END

本文為“愛鋒程序猿”原創(chuàng),轉(zhuǎn)載請寫明出處逻澳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闸天,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斜做,更是在濱河造成了極大的恐慌苞氮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓤逼,死亡現(xiàn)場離奇詭異笼吟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)霸旗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門贷帮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诱告,你說我怎么就攤上這事撵枢。” “怎么了精居?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵锄禽,是天一觀的道長。 經(jīng)常有香客問我靴姿,道長沃但,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任佛吓,我火速辦了婚禮宵晚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘维雇。我一直安慰自己淤刃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布谆沃。 她就那樣靜靜地躺著钝凶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耕陷,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天掂名,我揣著相機(jī)與錄音,去河邊找鬼哟沫。 笑死饺蔑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗜诀。 我是一名探鬼主播猾警,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼隆敢!你這毒婦竟也來了发皿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拂蝎,失蹤者是張志新(化名)和其女友劉穎穴墅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體温自,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玄货,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悼泌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片松捉。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖馆里,靈堂內(nèi)的尸體忽然破棺而出隘世,到底是詐尸還是另有隱情,我是刑警寧澤也拜,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布以舒,位于F島的核電站,受9級特大地震影響慢哈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜永票,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一卵贱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侣集,春花似錦键俱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至臭埋,卻和暖如春踪央,著一層夾襖步出監(jiān)牢的瞬間臀玄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工畅蹂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留健无,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓液斜,卻偏偏與公主長得像累贤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子少漆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容