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