今天跟大家分享幾個(gè)
我在爬蟲(chóng)中用到的技巧
技巧Ⅰ
爬取人家網(wǎng)站的時(shí)候頻率不要太高,
有事沒(méi)事睡一會(huì)删铃,睡久了沒(méi)效率
睡短了耳贬,被反爬了,那就尷尬了....
隨機(jī)數(shù)更具有欺騙性
所以睡多久,random決定猎唁!
importtime
importrandom
foriinrange(1,11):
time?=?random.random()*5
print(f'第{i}次睡了:',?time,'s')
'''
第1次睡了:?0.6327309035891232 s
第2次睡了:?0.037961811128097045 s
第3次睡了:?0.7443093721610153 s
第4次睡了:?0.564336149517787 s
第5次睡了:?0.39922345839757245 s
第6次睡了:?0.13724989845026703 s
第7次睡了:?0.7877693301824763 s
第8次睡了:?0.5641490602064826 s
第9次睡了:?0.05517343036931721 s
第10次睡了:?0.3992618299505627 s
'''
所以可以試著在爬蟲(chóng)代碼加入這句代碼
讓子彈飛一會(huì)
time.sleep(random.random()*5)
技巧Ⅱ
User-Agent中文名為用戶代理咒劲,簡(jiǎn)稱 UA,
它是一個(gè)特殊字符串頭诫隅,使得服務(wù)器能夠識(shí)別客戶使用的操作系統(tǒng)及版本腐魂、CPU 類型、瀏覽器及版本逐纬、瀏覽器渲染引擎蛔屹、瀏覽器語(yǔ)言、瀏覽器插件等豁生。
簡(jiǎn)單來(lái)說(shuō)就是模擬瀏覽器去訪問(wèn)頁(yè)面兔毒,
這樣才不會(huì)被網(wǎng)站反爬到。
但是哪里去搞user-agnet呢甸箱?
隨機(jī)數(shù)更具有欺騙性
所以哪里搞育叁?李相赫決定!
fromfake_useragentimportUserAgent
foriinrange(1,11):
ua?=?UserAgent().random
print(f'第{i}次的ua是',?ua)
'''
第1次的ua是?Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/29.0.1547.62?Safari/537.36
第2次的ua是?Mozilla/5.0?(Windows?NT?6.1;?rv:21.0)?Gecko/20130401?Firefox/21.0
第3次的ua是?Mozilla/5.0?(Macintosh;?U;?Intel?Mac?OS?X?10_6_6;?es-es)?AppleWebKit/533.20.25?(KHTML,?like?Gecko)?Version/5.0.4?Safari/533.20.27
第4次的ua是?Mozilla/5.0?(X11;?CrOS?i686?4319.74.0)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/29.0.1547.57?Safari/537.36
第5次的ua是?Mozilla/5.0?(Macintosh;?U;?Intel?Mac?OS?X?10_6_6;?fr-ch)?AppleWebKit/533.19.4?(KHTML,?like?Gecko)?Version/5.0.3?Safari/533.19.4
第6次的ua是?Mozilla/5.0?(X11;?OpenBSD?i386)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/36.0.1985.125?Safari/537.36
第7次的ua是?Mozilla/5.0?(X11;?NetBSD)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/27.0.1453.116?Safari/537.36
第8次的ua是?Mozilla/5.0?(X11;?Linux?i586;?rv:31.0)?Gecko/20100101?Firefox/31.0
第9次的ua是?Mozilla/4.0?(compatible;?MSIE?8.0;?Windows?NT?6.1;?WOW64;?Trident/4.0;?SLCC2;?.NET?CLR?2.0.50727;?.NET?CLR?3.5.30729;?.NET?CLR?3.0.30729;?Media?Center?PC?6.0;?Zune?3.0)
第10次的ua是?Mozilla/5.0?(Windows?NT?5.1)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/31.0.1650.16?Safari/537.36
'''
夠用不芍殖?老板
所以可以試著在爬蟲(chóng)代碼加入這句代碼
讓ua更具有欺騙性
headers= {'User-Agent':str(UserAgent().random)}
技巧Ⅲ
讓你事半功倍的瀏覽器插件
插件使用之前:
插件使用之后:
插件在哪里下載豪嗽?
技巧Ⅳ
巧用pprint
這跟上面那個(gè)效果差不多,只不過(guò)剛才那個(gè)是在瀏覽器中查看的
而這個(gè)我們是在pycharm中查看的
來(lái)看效果吧
print()打印豌骏,不知道你感覺(jué)如何龟梦,我一臉懵逼
importrequests
url?='https://www.douyu.com/gapi/rknc/directory/yzRec/1'
resp?=?requests.get(url).json()
print(resp)
pprint()打印,這種結(jié)構(gòu)看起來(lái)如何呢肯适?
frompprintimportpprint
importrequests
url?='https://www.douyu.com/gapi/rknc/directory/yzRec/1'
resp?=?requests.get(url).json()
pprint(resp)
技巧Ⅴ
對(duì)于頁(yè)面解析最強(qiáng)大的當(dāng)然是正則表達(dá)式变秦,這個(gè)對(duì)于不同網(wǎng)站不同的使用者都不一樣,就不用過(guò)多的說(shuō)明框舔,附兩個(gè)比較好的網(wǎng)址:
正則表達(dá)式入門:
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
正則表達(dá)式在線測(cè)試:
http://tool.oschina.net/regex/
其次就是解析庫(kù)了蹦玫,常用的有兩個(gè)lxml和BeautifulSoup,對(duì)于這兩個(gè)的使用介紹兩個(gè)比較好的網(wǎng)站:
lxml:http://my.oschina.net/jhao104/blog/639448
BeautifulSoup:http://cuiqingcai.com/1319.html
對(duì)于這兩個(gè)庫(kù)刘绣,我的評(píng)價(jià)是樱溉,都是HTML/XML的處理庫(kù),
Beautifulsoup純python實(shí)現(xiàn)纬凤,效率低福贞,但是功能實(shí)用,
比如能用通過(guò)結(jié)果搜索獲得某個(gè)HTML節(jié)點(diǎn)的源碼停士;
lxml C語(yǔ)言編碼挖帘,高效完丽,支持Xpath。
技巧Ⅵ
在一些網(wǎng)站服務(wù)中拇舀,除了對(duì) user-agent 的身份信息進(jìn)行檢測(cè)逻族、
也對(duì)客戶端的 ip 地址做了限制,
如果是同一個(gè)客戶端訪問(wèn)此網(wǎng)站服務(wù)器的次數(shù)過(guò)多就會(huì)將其識(shí)別為爬蟲(chóng)骄崩,
因而聘鳞,限制其客戶端 ip 的訪問(wèn)。這樣的限制給我們的爬蟲(chóng)帶來(lái)了麻煩要拂,所以使用代理 ip 在爬蟲(chóng)中是非常有必要的抠璃。
這里我給大家提供一下兩個(gè)網(wǎng)站供參考
66代理:http://www.66ip.cn/6.html
快代理:https://www.kuaidaili.com/free/
大家可以將這些ip使用爬蟲(chóng)下載到本地,然后檢查每一個(gè)ip的狀態(tài)碼判斷其是否可用脱惰。
這樣每次使用爬蟲(chóng)下載文件的時(shí)候搏嗡。
只需使用random隨機(jī)使用一個(gè)就可以。
技巧Ⅶ
驗(yàn)證碼我們?cè)诤芏嗑W(wǎng)站會(huì)遇到枪芒,如果請(qǐng)求量大了之后就會(huì)遇到驗(yàn)證碼的情況彻况。
最讓人詬病的12306谁尸,其實(shí)也是一定程度上的防止非正當(dāng)請(qǐng)求的產(chǎn)生舅踪。
對(duì)于驗(yàn)證碼,可以通過(guò)OCR來(lái)識(shí)別圖片良蛮,Github上面有很多大神分享的代碼可以用抽碌,可以去看看。
簡(jiǎn)單的OCR識(shí)別驗(yàn)證碼:
fromPILimportImage
importtesserocr
#tesserocr識(shí)別圖片的2種方法
img?=?Image.open("code.jpg")
verify_code1?=?tesserocr.image_to_text(img)
#print(verify_code1)
verify_code2?=?tesserocr.file_to_text("code.jpg")
技巧Ⅷ
headers這應(yīng)該是最常見(jiàn)的决瞳,最基本的反爬蟲(chóng)手段货徙,主要是初步判斷你是否是真實(shí)的瀏覽器在操作。
遇到這類反爬機(jī)制皮胡,可以直接在自己寫(xiě)的爬蟲(chóng)中添加Headers痴颊,將瀏覽器的User-Agent復(fù)制到爬蟲(chóng)的Headers中。
以edge瀏覽器為例屡贺,瀏覽器中打開(kāi)頁(yè)面蠢棱;
第一步:點(diǎn)擊上圖中“網(wǎng)絡(luò)”標(biāo)簽,然后刷新或載入頁(yè)面
第二步:在右側(cè)“標(biāo)頭”下方的“請(qǐng)求標(biāo)頭”中的所有信息都是headers內(nèi)容甩栈,添加到請(qǐng)求中即可泻仙。