說說我在爬蟲中常用的8個技巧,最后一個屢試不爽

今天跟大家分享幾個

我在爬蟲中用到的技巧

技巧Ⅰ

爬取人家網(wǎng)站的時候頻率不要太高,

有事沒事睡一會,睡久了沒效率

睡短了,被反爬了,那就尷尬了....

隨機數(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

'''

所以可以試著在爬蟲代碼加入這句代碼

讓子彈飛一會

time.sleep(random.random()*5)


技巧Ⅱ

User-Agent中文名為用戶代理,簡稱 UA,

它是一個特殊字符串頭,使得服務(wù)器能夠識別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

簡單來說就是模擬瀏覽器去訪問頁面,

這樣才不會被網(wǎng)站反爬到。

但是哪里去搞user-agnet呢?

隨機數(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

'''

夠用不?老板

所以可以試著在爬蟲代碼加入這句代碼

讓ua更具有欺騙性

headers= {'User-Agent':str(UserAgent().random)}


技巧Ⅲ

讓你事半功倍的瀏覽器插件

插件使用之前:

插件使用之后:

插件在哪里下載?

技巧Ⅳ

巧用pprint

這跟上面那個效果差不多,只不過剛才那個是在瀏覽器中查看的

而這個我們是在pycharm中查看的

來看效果吧

print()打印,不知道你感覺如何,我一臉懵逼

importrequests

url?='https://www.douyu.com/gapi/rknc/directory/yzRec/1'

resp?=?requests.get(url).json()

print(resp)

pprint()打印,這種結(jié)構(gòu)看起來如何呢?

frompprintimportpprint

importrequests

url?='https://www.douyu.com/gapi/rknc/directory/yzRec/1'

resp?=?requests.get(url).json()

pprint(resp)


技巧Ⅴ

對于頁面解析最強大的當(dāng)然是正則表達式,這個對于不同網(wǎng)站不同的使用者都不一樣,就不用過多的說明,附兩個比較好的網(wǎng)址:

正則表達式入門:

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

正則表達式在線測試:

http://tool.oschina.net/regex/

其次就是解析庫了,常用的有兩個lxml和BeautifulSoup,對于這兩個的使用介紹兩個比較好的網(wǎng)站:

lxml:http://my.oschina.net/jhao104/blog/639448

BeautifulSoup:http://cuiqingcai.com/1319.html

對于這兩個庫,我的評價是,都是HTML/XML的處理庫,

Beautifulsoup純python實現(xiàn),效率低,但是功能實用,

比如能用通過結(jié)果搜索獲得某個HTML節(jié)點的源碼;

lxml C語言編碼,高效,支持Xpath。


技巧Ⅵ

在一些網(wǎng)站服務(wù)中,除了對 user-agent 的身份信息進行檢測、

也對客戶端的 ip 地址做了限制,

如果是同一個客戶端訪問此網(wǎng)站服務(wù)器的次數(shù)過多就會將其識別為爬蟲,

因而,限制其客戶端 ip 的訪問。這樣的限制給我們的爬蟲帶來了麻煩,所以使用代理 ip 在爬蟲中是非常有必要的。

這里我給大家提供一下兩個網(wǎng)站供參考

66代理:http://www.66ip.cn/6.html

快代理:https://www.kuaidaili.com/free/

大家可以將這些ip使用爬蟲下載到本地,然后檢查每一個ip的狀態(tài)碼判斷其是否可用。

這樣每次使用爬蟲下載文件的時候。

只需使用random隨機使用一個就可以。

技巧Ⅶ

驗證碼我們在很多網(wǎng)站會遇到,如果請求量大了之后就會遇到驗證碼的情況。

最讓人詬病的12306,其實也是一定程度上的防止非正當(dāng)請求的產(chǎn)生。

對于驗證碼,可以通過OCR來識別圖片,Github上面有很多大神分享的代碼可以用,可以去看看。

簡單的OCR識別驗證碼:

fromPILimportImage

importtesserocr

#tesserocr識別圖片的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)該是最常見的,最基本的反爬蟲手段,主要是初步判斷你是否是真實的瀏覽器在操作。

遇到這類反爬機制,可以直接在自己寫的爬蟲中添加Headers,將瀏覽器的User-Agent復(fù)制到爬蟲的Headers中。

以edge瀏覽器為例,瀏覽器中打開頁面;

第一步:點擊上圖中“網(wǎng)絡(luò)”標(biāo)簽,然后刷新或載入頁面

第二步:在右側(cè)“標(biāo)頭”下方的“請求標(biāo)頭”中的所有信息都是headers內(nèi)容,添加到請求中即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容