App下載

python爬蟲(chóng)進(jìn)階——python爬蟲(chóng)優(yōu)化

知名氣人小說(shuō)寫(xiě)手 2021-06-03 09:32:23 瀏覽數(shù) (2996)
反饋

在閱讀完小編的這篇文章后(怎么用python爬數(shù)據(jù)?python爬蟲(chóng)基礎(chǔ)介紹!),相信肯定有小伙伴在抱怨“這寫(xiě)的啥啊,正則表達(dá)式完全看不懂啊?”這種話。其實(shí)小編是故意的,雖然現(xiàn)在能用的工具那么多,正則表達(dá)式是比較不常用的那種,但正則表達(dá)式是比較容易理解的(其他方法可能需要學(xué)習(xí)一些 XML 的知識(shí))。不過(guò)接下來(lái),小編要介紹的,就是一系列爬蟲(chóng)開(kāi)發(fā)的優(yōu)化(包括如何不用正則表達(dá)式)。各位小伙伴們趕緊上車(chē),開(kāi)始 python 爬蟲(chóng)優(yōu)化之路吧。

使用header

這是一個(gè)很重要的知識(shí),在進(jìn)行頁(yè)面請(qǐng)求的時(shí)候,請(qǐng)求頭里面會(huì)有一些信息。如果使用爬蟲(chóng)的時(shí)候,默認(rèn)是沒(méi)有這些信息的(所以服務(wù)器一看到請(qǐng)求頭里沒(méi)有相關(guān)信息,一下子知道你是爬蟲(chóng)了)。有些服務(wù)器不會(huì)給這種請(qǐng)求返回響應(yīng)(也就是比較簡(jiǎn)單的反爬蟲(chóng))。其實(shí)在使用 request 進(jìn)行頁(yè)面獲取的時(shí)候,?get()? 方法可以傳入一個(gè) header。只要在 header 里面存進(jìn)去相應(yīng)的瀏覽器請(qǐng)求頭信息,爬蟲(chóng)就可以偽裝成瀏覽器,這樣服務(wù)器就會(huì)正常的返回響應(yīng)。

Request庫(kù)

有些爬蟲(chóng)使用的是 python 自帶的 urllib 庫(kù)進(jìn)行爬蟲(chóng)開(kāi)發(fā)(小編的上一篇文章直接用的 request 庫(kù)),這個(gè)自帶的庫(kù)是很強(qiáng)大的。不過(guò),request 庫(kù),比 urllib 庫(kù)更加強(qiáng)大,可以用更少的代碼來(lái)進(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ù)可以通過(guò)模擬用戶操作來(lái)進(jìn)行對(duì)瀏覽器的控制。爬蟲(chóng)也可以利用這個(gè)庫(kù)來(lái)進(jìn)行對(duì)瀏覽器的控制和獲取數(shù)據(jù)。不過(guò)因?yàn)槭褂?Selenium 必須要打開(kāi)瀏覽器運(yùn)行,所以相較于不使用 Selenium 的爬蟲(chóng)會(huì)比較笨拙且速度較慢。不過(guò)他因?yàn)樗苯硬僮鳛g覽器,所以不需要進(jìn)行瀏覽器偽裝,有些數(shù)據(jù)在爬取的時(shí)候要求用戶有一定的操作,這種情況也只有 Selenium 能勝任·。

使用多線程

單線程的爬蟲(chóng)就像一個(gè)人干活,終究是干不過(guò)多線程的。使用多線程,可以讓你的爬蟲(chóng)爬取速度得到極大的提升。

使用ip代理

前面介紹了 header,有些服務(wù)器為了防止爬蟲(chóng)(特別是經(jīng)過(guò)瀏覽器偽裝的爬蟲(chó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 地址來(lái)繞過(guò)這一檢測(cè)機(jī)制。

使用Cookie

在遇到需要登陸的情況時(shí),可以使用 Cookie 來(lái)進(jìn)行登陸。

注:登陸情況也可以使用 Selenium 去自動(dòng)化登陸,或者使用表單形式請(qǐng)求服務(wù)器。

數(shù)據(jù)儲(chǔ)存

這分成三種情況,沒(méi)有夢(mèng)想的咸魚(yú)可以直接將數(shù)據(jù)使用內(nèi)置的文件函數(shù)保存成文本文件。

想要把數(shù)據(jù)保存成 csv 格式的,可以了解一下這個(gè)庫(kù)—csv 庫(kù)。這個(gè)庫(kù)可以讀寫(xiě) csv 文件,把文件保存成這種格式可以使用 Excel 打開(kāi)這種數(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)用。

爬蟲(chóng)框架—scrapy

與其他語(yǔ)言一樣,某些技術(shù)整合起來(lái),就能成為一個(gè)框架。爬蟲(chóng)也有一個(gè)這樣的框架,那就是 scrapy。使用這個(gè)框架可以更快速的進(jìn)行爬蟲(chóng)的開(kāi)發(fā)。剛巧 W3Cschool 上有scrapy框架學(xué)習(xí)視頻,感興趣的小伙伴可以前往學(xué)習(xí)。

小結(jié)

在學(xué)會(huì)了上面的技術(shù)和庫(kù)的使用后,可以對(duì)爬蟲(chóng)開(kāi)發(fā)進(jìn)行優(yōu)化,也能提高 python 爬蟲(chóng)的開(kāi)發(fā)速度。如果小伙伴們真的對(duì)爬蟲(chóng)感興趣的話可以對(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 爬蟲(chóng)的學(xué)習(xí)過(guò)程中也盡量少用較高次數(shù)的循環(huán)語(yǔ)句進(jìn)行爬??!另外有些信息是不能去爬取的(比如個(gè)人信息這類(lèi)),法律紅線不能碰!


0 人點(diǎn)贊