在閱讀完小編的這篇文章后(怎么用python爬數(shù)據(jù)?python爬蟲基礎(chǔ)介紹!),相信肯定有小伙伴在抱怨“這寫的啥啊,正則表達(dá)式完全看不懂?。俊边@種話。其實(shí)小編是故意的,雖然現(xiàn)在能用的工具那么多,正則表達(dá)式是比較不常用的那種,但正則表達(dá)式是比較容易理解的(其他方法可能需要學(xué)習(xí)一些 XML 的知識(shí))。不過接下來,小編要介紹的,就是一系列爬蟲開發(fā)的優(yōu)化(包括如何不用正則表達(dá)式)。各位小伙伴們趕緊上車,開始 python 爬蟲優(yōu)化之路吧。
使用header
這是一個(gè)很重要的知識(shí),在進(jìn)行頁(yè)面請(qǐng)求的時(shí)候,請(qǐng)求頭里面會(huì)有一些信息。如果使用爬蟲的時(shí)候,默認(rèn)是沒有這些信息的(所以服務(wù)器一看到請(qǐng)求頭里沒有相關(guān)信息,一下子知道你是爬蟲了)。有些服務(wù)器不會(huì)給這種請(qǐng)求返回響應(yīng)(也就是比較簡(jiǎn)單的反爬蟲)。其實(shí)在使用 request 進(jìn)行頁(yè)面獲取的時(shí)候,?get()
? 方法可以傳入一個(gè) header。只要在 header 里面存進(jìn)去相應(yīng)的瀏覽器請(qǐng)求頭信息,爬蟲就可以偽裝成瀏覽器,這樣服務(wù)器就會(huì)正常的返回響應(yīng)。
Request庫(kù)
有些爬蟲使用的是 python 自帶的 urllib 庫(kù)進(jìn)行爬蟲開發(fā)(小編的上一篇文章直接用的 request 庫(kù)),這個(gè)自帶的庫(kù)是很強(qiáng)大的。不過,request 庫(kù),比 urllib 庫(kù)更加強(qiáng)大,可以用更少的代碼來進(jìn)行模擬瀏覽器操作。
Beautiful Soup庫(kù)
這是一個(gè)高效的網(wǎng)頁(yè)(xml)解析庫(kù),可以從 HTML 或者 XML 中提取數(shù)據(jù)。使用這個(gè)庫(kù)可以簡(jiǎn)單快速的進(jìn)行數(shù)據(jù) html 數(shù)據(jù)定位和提取,如果會(huì)使用 css 選擇器,甚至可以結(jié)合 css 選擇器進(jìn)行使用。有了他,基本就可以告別正則匹配了。
Selenium庫(kù)
這是一個(gè)自動(dòng)化測(cè)試經(jīng)常會(huì)涉及到的庫(kù)。這個(gè)庫(kù)可以通過模擬用戶操作來進(jìn)行對(duì)瀏覽器的控制。爬蟲也可以利用這個(gè)庫(kù)來進(jìn)行對(duì)瀏覽器的控制和獲取數(shù)據(jù)。不過因?yàn)槭褂?Selenium 必須要打開瀏覽器運(yùn)行,所以相較于不使用 Selenium 的爬蟲會(huì)比較笨拙且速度較慢。不過他因?yàn)樗苯硬僮鳛g覽器,所以不需要進(jìn)行瀏覽器偽裝,有些數(shù)據(jù)在爬取的時(shí)候要求用戶有一定的操作,這種情況也只有 Selenium 能勝任·。
使用多線程
單線程的爬蟲就像一個(gè)人干活,終究是干不過多線程的。使用多線程,可以讓你的爬蟲爬取速度得到極大的提升。
使用ip代理
前面介紹了 header,有些服務(wù)器為了防止爬蟲(特別是經(jīng)過瀏覽器偽裝的爬蟲),會(huì)對(duì)相同 ip 地址的請(qǐng)求進(jìn)行處理(當(dāng)短時(shí)間內(nèi)同一 ip 對(duì)服務(wù)器進(jìn)行多次請(qǐng)求時(shí)會(huì)拒絕請(qǐng)求),這時(shí)候就要學(xué)會(huì)使用 ip 代理池偽裝你的 ip 地址來繞過這一檢測(cè)機(jī)制。
使用Cookie
在遇到需要登陸的情況時(shí),可以使用 Cookie 來進(jìn)行登陸。
注:登陸情況也可以使用 Selenium 去自動(dòng)化登陸,或者使用表單形式請(qǐng)求服務(wù)器。
數(shù)據(jù)儲(chǔ)存
這分成三種情況,沒有夢(mèng)想的咸魚可以直接將數(shù)據(jù)使用內(nèi)置的文件函數(shù)保存成文本文件。
想要把數(shù)據(jù)保存成 csv 格式的,可以了解一下這個(gè)庫(kù)—csv 庫(kù)。這個(gè)庫(kù)可以讀寫 csv 文件,把文件保存成這種格式可以使用 Excel 打開這種數(shù)據(jù),表格化的數(shù)據(jù)更加直觀。
想要把數(shù)據(jù)保存進(jìn)數(shù)據(jù)庫(kù)的,可以使用 pymysql 庫(kù)。這個(gè)庫(kù)可以進(jìn)行數(shù)據(jù)庫(kù)的操作,把文件存入數(shù)據(jù)庫(kù)更易于管理,而且也方便其他應(yīng)用的調(diào)用。
爬蟲框架—scrapy
與其他語(yǔ)言一樣,某些技術(shù)整合起來,就能成為一個(gè)框架。爬蟲也有一個(gè)這樣的框架,那就是 scrapy。使用這個(gè)框架可以更快速的進(jìn)行爬蟲的開發(fā)。剛巧 W3Cschool 上有scrapy框架學(xué)習(xí)視頻,感興趣的小伙伴可以前往學(xué)習(xí)。
小結(jié)
在學(xué)會(huì)了上面的技術(shù)和庫(kù)的使用后,可以對(duì)爬蟲開發(fā)進(jìn)行優(yōu)化,也能提高 python 爬蟲的開發(fā)速度。如果小伙伴們真的對(duì)爬蟲感興趣的話可以對(duì)上面提到的技術(shù)和工具進(jìn)行深入研究。文章到這里基本也就結(jié)束了,但為了各位小伙伴們能夠保護(hù)好自己,特地附上小編警告:非法爬取網(wǎng)站數(shù)據(jù),會(huì)對(duì)網(wǎng)站的日常運(yùn)營(yíng)造成一定的負(fù)擔(dān),這種行為也是違法行為,請(qǐng)勿惡意爬取別人的網(wǎng)站數(shù)據(jù),在 python 爬蟲的學(xué)習(xí)過程中也盡量少用較高次數(shù)的循環(huán)語(yǔ)句進(jìn)行爬?。×硗庥行┬畔⑹遣荒苋ヅ廊〉模ū热鐐€(gè)人信息這類),法律紅線不能碰!