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