小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Crawler:關(guān)于爬蟲(chóng)的簡(jiǎn)介、安裝、使用方法之詳細(xì)攻略

 處女座的程序猿 2021-09-28

Crawler:關(guān)于爬蟲(chóng)的簡(jiǎn)介、安裝、使用方法之詳細(xì)攻略


爬蟲(chóng)簡(jiǎn)介

1、在爬取一些簡(jiǎn)單的(沒(méi)有反爬機(jī)制的)靜態(tài)網(wǎng)頁(yè)時(shí),一般采取的策略是:選中目標(biāo)(所謂的url鏈接),觀察結(jié)構(gòu)(鏈接結(jié)構(gòu),網(wǎng)頁(yè)結(jié)構(gòu)),構(gòu)思動(dòng)手(選用什么HTML下載器,解析器等)。在爬蟲(chóng)過(guò)程中,都會(huì)涉及到三種利器:
HTML下載器:下載HTML網(wǎng)頁(yè)
HTML解析器:解析出有效數(shù)據(jù)
數(shù)據(jù)存儲(chǔ)器:將有效數(shù)據(jù)通過(guò)文件或者數(shù)據(jù)庫(kù)的形式存儲(chǔ)起來(lái)

爬蟲(chóng)過(guò)程思路

1、將數(shù)據(jù)以字典形式建立
首先要知道,data里面的內(nèi)容是都需要在代碼中發(fā)送給服務(wù)器的。
Crawler:爬蟲(chóng)有道翻譯
2、反爬蟲(chóng)機(jī)制
? ? ? ? 理解反爬蟲(chóng)機(jī)制,找出加密參數(shù)。大多數(shù)網(wǎng)站的反爬蟲(chóng)的機(jī)制是對(duì)向服務(wù)器提交表單的動(dòng)態(tài)值進(jìn)行加密,所以,我們每翻譯一次,就觀察data里面有哪些參數(shù)是動(dòng)態(tài)變化的。從這個(gè)網(wǎng)址來(lái)看,參數(shù)salt、sign對(duì)應(yīng)的值是動(dòng)態(tài)變化。找出動(dòng)態(tài)參數(shù)的實(shí)現(xiàn)方式。根據(jù)反爬蟲(chóng)經(jīng)驗(yàn)可知,一般網(wǎng)站生成的反爬加密值都是采用的時(shí)間戳,以及將一下字符串使用加密算法加密一下,我們可以從網(wǎng)頁(yè)源代碼中進(jìn)行查找理解。
(1)、偽裝瀏覽器:在 HTTP Request 中加入特定的 Header ?要加入 header,需要使用 Request 對(duì)象。對(duì)有些 header 要特別留意,服務(wù)器會(huì)針對(duì)這些 header 做檢查。

  • User-Agent : 有些服務(wù)器或 Proxy 會(huì)通過(guò)該值來(lái)判斷是否是瀏覽器發(fā)出的請(qǐng)求
  • Content-Type : 在使用 REST 接口時(shí),服務(wù)器會(huì)檢查該值,用來(lái)確定 HTTP Body 中的內(nèi)容該怎樣解析。常見(jiàn)的取值有:
  1. application/xml : 在 XML RPC,如 RESTful/SOAP 調(diào)用時(shí)使用
  2. application/json : 在 JSON RPC 調(diào)用時(shí)使用
  3. application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時(shí)使用
  • 在使用服務(wù)器提供的 RESTful 或 SOAP 服務(wù)時(shí), Content-Type 設(shè)置錯(cuò)誤會(huì)導(dǎo)致服務(wù)器拒絕服務(wù)

(2)、調(diào)用代理訪問(wèn)
原因:一個(gè)合格的網(wǎng)站為了防止服務(wù)器負(fù)載過(guò)大,也應(yīng)該設(shè)置這樣的機(jī)制來(lái)限制頻繁請(qǐng)求。很多網(wǎng)站會(huì)檢測(cè)某一段時(shí)間某個(gè)IP的訪問(wèn)次數(shù),如果訪問(wèn)頻率太快以至于看起來(lái)不像正常訪客,它可能就會(huì)會(huì)禁止這個(gè)IP的訪問(wèn)。所以我們需要設(shè)置一些代理服務(wù)器,每隔一段時(shí)間換一個(gè)代理,就算IP被禁止,依然可以換個(gè)IP繼續(xù)爬取。
策略:

  • 采用時(shí)間間隔(單個(gè)IP):為了防止一個(gè)IP訪問(wèn)過(guò)于頻繁而造成的的拒絕訪問(wèn),治標(biāo)的方法是,在求請(qǐng)?jiān)L問(wèn)的時(shí)候設(shè)置一定的時(shí)間間隔。import time ?...... ?time.sleep(10) ?......
  • 采用動(dòng)態(tài)代理(多個(gè)IP):可以事先獲取cn-proxy代理的IP地址,寫(xiě)到一個(gè)列表內(nèi),采用隨機(jī)的方法獲取不同的代理ip地址。

關(guān)于Python實(shí)現(xiàn)爬蟲(chóng)的一些包

? ? ? ?requests、beautifulsoup 是爬蟲(chóng)兩大神器,reuqests 用于網(wǎng)絡(luò)請(qǐng)求,beautifusoup 用于操作 html 數(shù)據(jù)。有了這兩把梭子,干起活來(lái)利索,scrapy 這樣的爬蟲(chóng)框架我們就不用了,小程序派上它有點(diǎn)殺雞用牛刀的意思。

1、requests

2、beautifulsoup

3、scrapy

關(guān)于爬蟲(chóng)常用的方法函數(shù)

1、基本函數(shù)

data = urllib.parse.urlencode(data).encode('utf-8') ? ? ? ?
#urllib.parse.urlencode方法:urllib庫(kù)里面這個(gè)urlencode函數(shù),可以把key-value這樣的鍵值對(duì)轉(zhuǎn)換成我們想要的格式,返回的是:參數(shù)a=1&參數(shù)b=2 ? ? 這樣的字符串。
#encode方法:向網(wǎng)頁(yè)post的數(shù)據(jù)格式必須為bytes類(lèi)型(字節(jié)流編碼格式的內(nèi)容,即 bytes 類(lèi)型,通過(guò) bytes() 函數(shù)可以進(jìn)行轉(zhuǎn)化),所以要轉(zhuǎn)碼。把字符串轉(zhuǎn)車(chē)utf-8編碼,然后把\x替換成%。如果你的終端是utf8編碼的,那么要把結(jié)果再轉(zhuǎn)成utf8輸出,否則就亂碼。

response = urllib.request.urlopen(url,data)
#urllib.request:以post的方式傳輸數(shù)據(jù),可以用來(lái)發(fā)送request和獲取request的結(jié)果。該模塊提供了最基本的構(gòu)造 HTTP 請(qǐng)求的方法,利用它可以模擬瀏覽器的一個(gè)請(qǐng)求發(fā)起過(guò)程,同時(shí)它還帶有處理 authenticaton (授權(quán)驗(yàn)證), redirections (重定向), cookies (瀏覽器Cookies)以及其它內(nèi)容。
# urllib.request.urlopen方法:給定網(wǎng)址url、post提交的數(shù)據(jù)data,來(lái)獲取頁(yè)面。urlopen() 方法,可以完成最基本的簡(jiǎn)單網(wǎng)頁(yè)的 GET 請(qǐng)求抓取。如果傳遞了這個(gè) data 參數(shù),它的請(qǐng)求方式就不再是 GET 方式請(qǐng)求,而是 POST 。

html = response.read().decode('utf-8')
# response.read方法:讀取返回的數(shù)據(jù)
#decode方法:轉(zhuǎn)換成str類(lèi)型輸出,將參數(shù)字典轉(zhuǎn)化為字符串

target = json.loads(html)
#json.loads()用于將str類(lèi)型的數(shù)據(jù)轉(zhuǎn)成dict。
#json.load()用于從json文件中讀取數(shù)據(jù)。
#?json.dumps()用于將dict類(lèi)型的數(shù)據(jù)轉(zhuǎn)成str,因?yàn)槿绻苯訉ict類(lèi)型的數(shù)據(jù)寫(xiě)入json文件中會(huì)發(fā)生報(bào)錯(cuò),因此在將數(shù)據(jù)寫(xiě)入時(shí)需要用到該函數(shù)。
#?json.dump()用于將dict類(lèi)型的數(shù)據(jù)轉(zhuǎn)成str,并寫(xiě)入到j(luò)son文件中。

相關(guān)文章推薦
python3網(wǎng)絡(luò)爬蟲(chóng)一《使用urllib.request發(fā)送請(qǐng)求》
?

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多