1. 程式人生 > 實用技巧 >一、爬蟲基本概念

一、爬蟲基本概念

一、爬蟲基本概念

1.1 什麼是網際網路?

網際網路是由網路裝置(網線,路由器,交換機,防火牆等等)和一臺臺計算機連線而成,像一張網一樣。

1.2 網際網路建立的目的?

​ 網際網路的核心價值在於資料的共享/傳遞:資料是存放於一臺臺計算機上的,而將計算機互聯到一起的目的就是為了能夠方便彼此之間的資料共享/傳遞,否則你只能拿U盤去別人的計算機上拷貝資料了。

1.3 什麼是上網?爬蟲要做的是什麼?

​ 我們所謂的上網便是由使用者端計算機發送請求給目標計算機,將目標計算機的資料下載到本地的過程。

  • 只不過,使用者獲取網路資料的方式是:瀏覽器提交請求->下載網頁程式碼->解析/渲染成頁面。
  • 而爬蟲程式要做的就是:模擬瀏覽器傳送請求->下載網頁程式碼->只提取有用的資料->存放於資料庫或檔案中
    前兩者的區別在於,我們的爬蟲程式只提取網頁程式碼中對我們有用的資料

1.4 總結爬蟲

爬蟲的比喻:
如果我們把網際網路比作一張大的蜘蛛網,那一臺計算機上的資料便是蜘蛛網上的一個獵物,而爬蟲程式就是一隻小蜘蛛,沿著蜘蛛網抓取自己想要的獵物(資料)

爬蟲的定義:
向網站發起請求,獲取資源後分析並提取有用資料的程式

爬蟲的價值:
網際網路中最有價值的便是資料,比如天貓商城的商品資訊,鏈家網的租房資訊,雪球網的證券投資資訊等等,這些資料都代表了各個行業的真金白銀,可以說,誰掌握了行業內的第一手資料,誰就成了整個行業的主宰,如果把整個網際網路的資料比喻為一座寶藏,那我們的爬蟲課程就是來教大家如何來高效地挖掘這些寶藏,掌握了爬蟲技能,你就成了所有網際網路資訊公司幕後的老闆,換言之,它們都在免費為你提供有價值的資料。

二、爬蟲的基本流程

2.1 發起請求

使用http庫向目標站點發起請求,即傳送一個Request
Request包含:請求頭、請求體等

2.2 獲取響應內容

如果伺服器能正常響應,則會得到一個Response
Response包含:html,json,圖片,視訊等

2.3 解析內容種類及相關工具

解析html資料:正則表示式,第三方解析庫如Beautifulsoup,pyquery等
解析json資料:json模組
解析二進位制資料:以b的方式寫入檔案

2.4 儲存資料

根據需求將資料儲存到資料庫或者檔案中

三、請求與響應

  • http協議:一個簡單的請求-響應協議,它通常執行在TCP之上,基於客戶/伺服器模式,且面向連線的
  • Request:(傳送請求)使用者將自己的資訊通過瀏覽器(socket client)傳送給伺服器(socket server)
  • Response:(獲得響應)伺服器接收請求,分析使用者發來的請求資訊,然後返回資料(返回的資料中可能包含其他連結,如:圖片,js,css等)

ps:瀏覽器在接收Response後,會解析其內容來顯示給使用者,而爬蟲程式在模擬瀏覽器傳送請求然後接收Response後,是要提取其中的有用資料

四、Request

4.1 請求方式

常用的請求方式:GET,POST
​ 其他請求方式:HEAD,PUT,DELETE,OPTHONS

ps:用瀏覽器演示get與post的區別,(用登入演示post)
1 post與get請求最終都會拼接成這種形式:k1=xxx&k2=yyy&k3=zzz
2 post請求的引數放在請求體內,可用瀏覽器檢視,存放於form data內
3 get請求的引數直接放在url後

4.2 請求url

​ url全稱統一資源定位符,如一個網頁文件,一張圖片,一個視訊等都可以用url唯一來確定

url編碼:https://www.baidu.com/s?wd=圖片
網頁的載入過程是:載入一個網頁,通常都是先載入document文件,在解析document文件的時候,遇到連結,則針對超連結發起下載圖片的請求

4.3 請求頭

​ User-agent:請求頭中如果沒有user-agent客戶端配置,服務端可能將你當做一個非法使用者
​ host:客戶端指定自己想訪問的http伺服器的域名/IP 地址和埠號
​ cookies:cookie用來儲存登入資訊

一般做爬蟲都會加上請求頭

4.4 請求體

​ 如果是get方式,請求體沒有內容
​ 如果是post方式,請求體是format data

ps:
1、登入視窗,檔案上傳等,資訊都會被附加到請求體內
2、登入,輸入錯誤的使用者名稱密碼,然後提交,就可以看到post,正確登入後頁面通常會跳轉,無法捕捉到post
#示例:
from urllib.parse import urlencode
import requests

headers={
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Cookie':'H_WISE_SIDS=101556_115474_115442_114743_108373_100099_115725_106201_107320_115339_114797_115553_116093_115546_115625_115446_114329_115350_114275_116040_110085; PSTM=1494300712; BAIDUID=42FE2934E37AF7AD1FA31D8CC7006D45:FG=1; BIDUPSID=2996557DB2710279BD865C50F9A68615; MCITY=-%3A; __cfduid=da9f97dea6458ca26aa4278280752ebb01508939712; BDSFRCVID=PGLsJeCCxG3wt_3ZUrBLDfv2D_qBZSjAgcEe3J; H_BDCLCKID_SF=tJAOoCLytI03qn5zq4Oh-4oHhxoJq5QxbT7Z0l8KtfcNVJQs-lCMhbtp-l3GJPoLWK6hBKQmWIQHDnbsbq0M2tcQXR5-WROCte74KKJx-4PWeIJo5tKh04JbhUJiB5OLBan7Lq7xfDDbbDtmej_3-PC3ql6354Rj2C_X3b7EfKjIOtO_bfbT2MbyeqrNQlTkLIvXoITJQD_bEP3Fbfj2DPQ3KabZqjDjJbue_I05f-oqebT4btbMqRtthf5KeJ3KaKrKW5rJabC3hPJeKU6qLT5Xjh6B5qDfyDoAbKOt-IOjhb5hMpnx-p0njxQyaR3RL2Kj0p_EWpcxsCQqLUonDh8L3H7MJUntKjnRonTO5hvvhb6O3M7-XpOhDG0fJjtJJbksQJ5e24oqHP-kKPrV-4oH5MQy5toyHD7yWCvjWlT5OR5Jj6KMjMkb3xbz2fcpMIrjob8M5CQESInv3MA--fcLD2ch5-3eQgTI3fbIJJjWsq0x0-jle-bQypoa-U0j2COMahkMal7xO-QO05CaD53yDNDqtjn-5TIX_CjJbnA_Hn7zepoxebtpbt-qJJjzMerW_Mc8QUJBH4tR-T3keh-83xbnBT5KaKO2-RnPXbcWjt_lWh_bLf_kQN3TbxuO5bRiL66I0h6jDn3oyT3VXp0n54nTqjDHfRuDVItXf-L_qtDk-PnVeUP3DhbZKxtqtDKjXJ7X2fclHJ7z-R3IBPCD0tjk-6JnWncKaRcI3poiqKtmjJb6XJkl2HQ405OT-6-O0KJcbRodobAwhPJvyT8DXnO7-fRTfJuJ_DDMJDD3fP36q4QV-JIehmT22jnT32JeaJ5n0-nnhP3mBTbA3JDYX-Oh-jjRX56GhfO_0R3jsJKRy66jK4JKjHKet6vP; ispeed_lsm=0; H_PS_PSSID=1421_24558_21120_17001_24880_22072; BD_UPN=123253; H_PS_645EC=44be6I1wqYYVvyugm2gc3PK9PoSa26pxhzOVbeQrn2rRadHvKoI%2BCbN5K%2Bg; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598',
'Host':'www.baidu.com',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

# response=requests.get('https://www.baidu.com/s?'+urlencode({'wd':'美女'}),headers=headers)
response=requests.get('https://www.baidu.com/s',params={'wd':'美女'},headers=headers) #params內部就是呼叫urlencode
print(response.text)

五、Response

5.1 常用響應狀態碼

詳細見部落格:https://www.cnblogs.com/LWX-YEER/p/13347245.html#%E4%B8%83%E3%80%81%E7%8A%B6%E6%80%81%E7%A0%81

​ 200:代表成功
​ 301:代表跳轉
​ 404:檔案不存在
​ 403:許可權
​ 502:伺服器錯誤

5.2 Respone header

​ set-cookie:可能有多個,是來告訴瀏覽器,把cookie儲存下來

5.3 preview就是網頁原始碼

​ 最主要的部分,包含了請求資源的內容, 如網頁html,圖片,二進位制資料等

六、總結

6.1 總結爬蟲流程

​ 爬取--->解析--->儲存

6.2爬蟲所需工具

​ 請求庫:requests,selenium
​ 解析庫:正則,beautifulsoup,pyquery
​ 儲存庫:檔案,MySQL,Mongodb,Redis

6.3 爬蟲常用框架

1、Scrapy:Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。它是很強大的爬蟲框架,可以滿足簡單的頁面爬取,比如可以明確獲知url pattern的情況。用這個框架可以輕鬆爬下來如亞馬遜商品資訊之類的資料。但是對於稍微複雜一點的頁面,如weibo的頁面資訊,這個框架就滿足不了需求了。它的特性有:HTML, XML源資料 選擇及提取 的內建支援;提供了一系列在spider之間共享的可複用的過濾器(即 Item Loaders),對智慧處理爬取資料提供了內建支援。

2、Crawley:高速爬取對應網站的內容,支援關係和非關係資料庫,資料可以匯出為JSON、XML等。

3、Portia:是一個開源視覺化爬蟲工具,可讓使用者在不需要任何程式設計知識的情況下爬取網站!簡單地註釋自己感興趣的頁面,Portia將建立一個蜘蛛來從類似的頁面提取資料。簡單來講,它是基於scrapy核心;視覺化爬取內容,不需要任何開發專業知識;動態匹配相同模板的內容。

4、newspaper:可以用來提取新聞、文章和內容分析。使用多執行緒,支援10多種語言等。作者從requests庫的簡潔與強大得到靈感,使用Python開發的可用於提取文章內容的程式。支援10多種語言並且所有的都是unicode編碼。

5、Python-goose:Java寫的文章提取工具。Python-goose框架可提取的資訊包括:文章主體內容、文章主要圖片、文章中嵌入的任何Youtube/Vimeo視訊、元描述、元標籤。

6、Beautiful Soup:名氣大,整合了一些常用爬蟲需求。它是一個可以從HTML或XML檔案中提取資料的Python庫。它能夠通過你喜歡的轉換器實現慣用的文件導航,查詢,修改文件的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間。Beautiful Soup的缺點是不能載入JS。

7、mechanize:它的優點是可以載入JS。當然它也有缺點,比如文件嚴重缺失。不過通過官方的example以及人肉嘗試的方法,還是勉強能用的。

8、selenium:這是一個呼叫瀏覽器的driver,通過這個庫你可以直接呼叫瀏覽器完成某些操作,比如輸入驗證碼。Selenium是自動化測試工具,它支援各種瀏覽器,包括 Chrome,Safari,Firefox等主流介面式瀏覽器,如果在這些瀏覽器裡面安裝一個 Selenium 的外掛,可以方便地實現Web介面的測試. Selenium支援瀏覽器驅動。Selenium支援多種語言開發,比如 Java,C,Ruby等等,PhantomJS 用來渲染解析JS,Selenium 用來驅動以及與Python的對接,Python進行後期的處理。

9、cola:是一個分散式的爬蟲框架,對於使用者來說,只需編寫幾個特定的函式,而無需關注分散式執行的細節。任務會自動分配到多臺機器上,整個過程對使用者是透明的。專案整體設計有點糟,模組間耦合度較高。

10、PySpider:一個國人編寫的強大的網路爬蟲系統並帶有強大的WebUI。採用Python語言編寫,分散式架構,支援多種資料庫後端,強大的WebUI支援指令碼編輯器,任務監視器,專案管理器以及結果檢視器。Python指令碼控制,可以用任何你喜歡的html解析包。