作為一名爬蟲界的農(nóng)名工片任,一直都是熟練使用scrapy偏友,永久了之后覺得效率頗高,也爬過大大小小的幾十個(gè)網(wǎng)站了对供。以前見過很多不同的反爬蟲機(jī)制:
1)robot.txt禁止爬蟲位他,這種是最好突破的了;
2) 需要添加header的, 才能得到爭(zhēng)取的response的; 也算是常規(guī)網(wǎng)站都有的;
3) 需要使用cookie的, 這部分需要登錄的網(wǎng)站中比較常用, 這部分算少一些了;
4) 登錄的時(shí)候要求使用驗(yàn)證碼的, 還需要調(diào)用ocr接口識(shí)別驗(yàn)證碼信息的, 之前爬取amazon就需要如此;
5) 最后一個(gè)就是類似于boss直聘這種網(wǎng)站了产场,需要拖動(dòng)滑塊來獲得驗(yàn)證鹅髓,然后再登錄,之前研究了一會(huì)京景,以失敗告終窿冯,未做進(jìn)一步研究;
就在這兩天确徙,我碰到一個(gè)網(wǎng)站lighting1.com醒串,受搞外貿(mào)的朋友委托,幫忙爬取下客戶信息鄙皇。作為一名熟練的爬蟲農(nóng)民工芜赌,第一次登錄lighting1.com的時(shí)候,覺得沒什么難度伴逸。馬上開搞较鼓,第一次請(qǐng)求完
淡定淡定,添加了user agent,再來
淡定淡定, 添加了header和cookie, 再來
what the fuck!!!
在心里奔騰過幾萬只草泥馬之后博烂,作為資深農(nóng)民工的我還是冷靜了下來香椎,一定要心平氣和,爬不了沒關(guān)系禽篱,要文明畜伐。于是乎,我請(qǐng)求瀏覽器緩存躺率,再一次打開了這個(gè)網(wǎng)站玛界,看到了一個(gè)神奇的事情:
Checking your browser before accessing lighting1.com. This process is automatic. Your browser will redirect to your requested content shortly, please allow up to 5 seconds...意思是現(xiàn)在在檢查瀏覽器,你的請(qǐng)求在5s之后才會(huì)返回悼吱,這也就解釋了為什么剛才每一次都是503了慎框,瀏覽器還沒有返回正確的response, 而程序因?yàn)槭盏?03就自動(dòng)結(jié)束了。而且后添,打開詳細(xì)的公司信息的時(shí)候笨枯,也是會(huì)有這樣子的問題,都要有檢查瀏覽器的過程遇西。
思考的時(shí)候馅精,腦海里浮現(xiàn)出印象中有一個(gè)叫做webdriver可以真正完美的模擬瀏覽器的運(yùn)行, 于是, 我就上手了。
環(huán)境: win10 x64
python: 3.8.1
工具: pycharm
因?yàn)槲伊?xí)慣用的是Google Chrome, 所以下載安裝chromedriver.exe
第一步, 當(dāng)然是啟動(dòng)瀏覽器了:
第二步, 獲取與分析網(wǎng)頁(yè):
默認(rèn)使用get方法, 不用像在scrapy里面, 需要添加各種header, cookies這些粱檀。需要添加time.sleep(5)是為了解決剛才瀏覽器進(jìn)入網(wǎng)站是檢查5s在返回?cái)?shù)據(jù)的問題. 再返回?cái)?shù)據(jù)之后, 我們需要提取當(dāng)中每一個(gè)公司的詳情頁(yè)面的鏈接洲敢。作為一名長(zhǎng)期使用scrapy的農(nóng)民工,我習(xí)慣使用xpath, 于是就通過find_elements_by_xpath()來提取鏈接茄蚯,并把鏈接保存到list里面.
當(dāng)抓取到第3頁(yè)的時(shí)候压彭,就開始提示要登錄了,要是以前使用scrapy必須先處理登錄的請(qǐng)求渗常,然后才能繼續(xù)往下抓取壮不。使用selenium發(fā)現(xiàn)瀏覽器自動(dòng)的往下走,絲毫不管需不需要登錄凳谦,都能正確獲取鏈接,真香衡未。
第三步,請(qǐng)求公司詳情頁(yè)缓醋,并保存返回?cái)?shù)據(jù)
第四步, 保存數(shù)據(jù)如失,作為一名懶人,直接使用最簡(jiǎn)單的辦法來保存:
自此大功告成送粱。
第一次使用selenium, 發(fā)現(xiàn)真是一個(gè)神器褪贵,除了效率低,其他方面真的是無可挑剔。特別是在應(yīng)對(duì)服務(wù)端和客戶端的一些驗(yàn)證上面脆丁,流氓得不要不要的世舰。接下去的愛好就是挖掘selenium的其他潛力。