Crawler:关于爬虫的简介、安装、使用方法之详细攻略
Crawler:關(guān)于爬蟲的簡介、安裝、使用方法之詳細(xì)攻略
?
?
目錄
爬蟲簡介
爬蟲過程思路
關(guān)于Python實(shí)現(xiàn)爬蟲的一些包
1、requests
2、beautifulsoup
3、scrapy
關(guān)于爬蟲常用的方法函數(shù)
1、基本函數(shù)
?
?
爬蟲簡介
1、在爬取一些簡單的(沒有反爬機(jī)制的)靜態(tài)網(wǎng)頁時,一般采取的策略是:選中目標(biāo)(所謂的url鏈接),觀察結(jié)構(gòu)(鏈接結(jié)構(gòu),網(wǎng)頁結(jié)構(gòu)),構(gòu)思動手(選用什么HTML下載器,解析器等)。在爬蟲過程中,都會涉及到三種利器:
HTML下載器:下載HTML網(wǎng)頁
HTML解析器:解析出有效數(shù)據(jù)
數(shù)據(jù)存儲器:將有效數(shù)據(jù)通過文件或者數(shù)據(jù)庫的形式存儲起來
?
?
爬蟲過程思路
1、將數(shù)據(jù)以字典形式建立
首先要知道,data里面的內(nèi)容是都需要在代碼中發(fā)送給服務(wù)器的。
Crawler:爬蟲有道翻譯
2、反爬蟲機(jī)制
? ? ? ? 理解反爬蟲機(jī)制,找出加密參數(shù)。大多數(shù)網(wǎng)站的反爬蟲的機(jī)制是對向服務(wù)器提交表單的動態(tài)值進(jìn)行加密,所以,我們每翻譯一次,就觀察data里面有哪些參數(shù)是動態(tài)變化的。從這個網(wǎng)址來看,參數(shù)salt、sign對應(yīng)的值是動態(tài)變化。找出動態(tài)參數(shù)的實(shí)現(xiàn)方式。根據(jù)反爬蟲經(jīng)驗(yàn)可知,一般網(wǎng)站生成的反爬加密值都是采用的時間戳,以及將一下字符串使用加密算法加密一下,我們可以從網(wǎng)頁源代碼中進(jìn)行查找理解。
(1)、偽裝瀏覽器:在 HTTP Request 中加入特定的 Header ?要加入 header,需要使用 Request 對象。對有些 header 要特別留意,服務(wù)器會針對這些 header 做檢查。
- User-Agent : 有些服務(wù)器或 Proxy 會通過該值來判斷是否是瀏覽器發(fā)出的請求
- Content-Type : 在使用 REST 接口時,服務(wù)器會檢查該值,用來確定 HTTP Body 中的內(nèi)容該怎樣解析。常見的取值有:
- 在使用服務(wù)器提供的 RESTful 或 SOAP 服務(wù)時, Content-Type 設(shè)置錯誤會導(dǎo)致服務(wù)器拒絕服務(wù)
(2)、調(diào)用代理訪問
原因:一個合格的網(wǎng)站為了防止服務(wù)器負(fù)載過大,也應(yīng)該設(shè)置這樣的機(jī)制來限制頻繁請求。很多網(wǎng)站會檢測某一段時間某個IP的訪問次數(shù),如果訪問頻率太快以至于看起來不像正常訪客,它可能就會會禁止這個IP的訪問。所以我們需要設(shè)置一些代理服務(wù)器,每隔一段時間換一個代理,就算IP被禁止,依然可以換個IP繼續(xù)爬取。
策略:
- 采用時間間隔(單個IP):為了防止一個IP訪問過于頻繁而造成的的拒絕訪問,治標(biāo)的方法是,在求請?jiān)L問的時候設(shè)置一定的時間間隔。import time ?...... ?time.sleep(10) ?......
- 采用動態(tài)代理(多個IP):可以事先獲取cn-proxy代理的IP地址,寫到一個列表內(nèi),采用隨機(jī)的方法獲取不同的代理ip地址。
?
?
關(guān)于Python實(shí)現(xiàn)爬蟲的一些包
? ? ? ?requests、beautifulsoup 是爬蟲兩大神器,reuqests 用于網(wǎng)絡(luò)請求,beautifusoup 用于操作 html 數(shù)據(jù)。有了這兩把梭子,干起活來利索,scrapy 這樣的爬蟲框架我們就不用了,小程序派上它有點(diǎn)殺雞用牛刀的意思。
1、requests
?
2、beautifulsoup
?
3、scrapy
?
?
關(guān)于爬蟲常用的方法函數(shù)
1、基本函數(shù)
data = urllib.parse.urlencode(data).encode('utf-8') ? ? ? ?
#urllib.parse.urlencode方法:urllib庫里面這個urlencode函數(shù),可以把key-value這樣的鍵值對轉(zhuǎn)換成我們想要的格式,返回的是:參數(shù)a=1&參數(shù)b=2 ? ? 這樣的字符串。
#encode方法:向網(wǎng)頁post的數(shù)據(jù)格式必須為bytes類型(字節(jié)流編碼格式的內(nèi)容,即 bytes 類型,通過 bytes() 函數(shù)可以進(jìn)行轉(zhuǎn)化),所以要轉(zhuǎn)碼。把字符串轉(zhuǎn)車utf-8編碼,然后把\x替換成%。如果你的終端是utf8編碼的,那么要把結(jié)果再轉(zhuǎn)成utf8輸出,否則就亂碼。
response = urllib.request.urlopen(url,data)
#urllib.request:以post的方式傳輸數(shù)據(jù),可以用來發(fā)送request和獲取request的結(jié)果。該模塊提供了最基本的構(gòu)造 HTTP 請求的方法,利用它可以模擬瀏覽器的一個請求發(fā)起過程,同時它還帶有處理 authenticaton (授權(quán)驗(yàn)證), redirections (重定向), cookies (瀏覽器Cookies)以及其它內(nèi)容。
# urllib.request.urlopen方法:給定網(wǎng)址url、post提交的數(shù)據(jù)data,來獲取頁面。urlopen() 方法,可以完成最基本的簡單網(wǎng)頁的 GET 請求抓取。如果傳遞了這個 data 參數(shù),它的請求方式就不再是 GET 方式請求,而是 POST 。
html = response.read().decode('utf-8')
# response.read方法:讀取返回的數(shù)據(jù)
#decode方法:轉(zhuǎn)換成str類型輸出,將參數(shù)字典轉(zhuǎn)化為字符串
target = json.loads(html)
#json.loads()用于將str類型的數(shù)據(jù)轉(zhuǎn)成dict。
#json.load()用于從json文件中讀取數(shù)據(jù)。
#?json.dumps()用于將dict類型的數(shù)據(jù)轉(zhuǎn)成str,因?yàn)槿绻苯訉ict類型的數(shù)據(jù)寫入json文件中會發(fā)生報錯,因此在將數(shù)據(jù)寫入時需要用到該函數(shù)。
#?json.dump()用于將dict類型的數(shù)據(jù)轉(zhuǎn)成str,并寫入到j(luò)son文件中。
?
?
相關(guān)文章推薦
python3網(wǎng)絡(luò)爬蟲一《使用urllib.request發(fā)送請求》
?
?
總結(jié)
以上是生活随笔為你收集整理的Crawler:关于爬虫的简介、安装、使用方法之详细攻略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python语言学习:解决python版
- 下一篇: wkhtmltopdf:wkhtmlto