''' 近年來,隨着網絡應用的逐漸擴展和深刻,如何高效的獲取網上數據成爲了無數公司和我的的追求,在大數據時代,誰掌握了更多的數據,誰就能夠得到更高的利益,而網絡爬蟲是其中最爲經常使用的一種從網上爬取數據的手段。 網絡爬蟲,即Web Spider,是一個很形象的名字。若是把互聯網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。網絡蜘蛛是經過網頁的連接地址來尋找網頁的。網站某一個頁面(一般是首頁)開始,讀取網頁的內容,找到在網頁中的其它連接地址,而後經過這些連接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站全部的網頁都抓取完爲止。若是把整個互聯網當成一個網站,那麼網絡蜘蛛就能夠用這個原理把互聯網上全部的網頁都抓取下來。 '''
爬蟲的比喻: 若是咱們把互聯網比做一張大的蜘蛛網,那一臺計算機上的數據即是蜘蛛網上的一個獵物,而爬蟲程序就是一隻小蜘蛛,沿着蜘蛛網抓取本身想要的獵物/數據 爬蟲的定義: 向網站發起請求,獲取資源後分析並提取有用數據的程序 爬蟲的價值: 互聯網中最有價值的即是數據,好比天貓商城的商品信息,鏈家網的租房信息,雪球網的證券投資信息等等,這些數據都表明了各個行業的真金白銀,能夠說,誰
掌握了行業內的第一手數據,誰就成了整個行業的主宰,若是把整個互聯網的數據比喻爲一座寶藏,那咱們的爬蟲課程就是來教你們如何來高效地挖掘這些寶藏,掌握了爬
蟲技能,你就成了全部互聯網信息公司幕後的老闆,換言之,它們都在免費爲你提供有價值的數據。
請求庫封裝了TCP 套接字(傳輸層),因此只要關注http協議(應用層)
http協議 +ip&端口(域名經過dns解析) +路由(這個html存放的位置)
http比做高速公路,他有規則
# 1.php: 能夠實現爬蟲。php被號稱是全世界最優美的語言(固然是其本身號稱的,就是王婆賣瓜的意思),可是php在實現爬蟲中支持多線程和多進程方面作的很差。 # 2.java: 能夠實現爬蟲。java能夠很是好的處理和實現爬蟲,是惟一能夠與python並駕齊驅且是python的頭號勁敵。可是java實現爬蟲代碼較爲臃腫,重構成本較大。 # 3.c、c++: 能夠實現爬蟲。可是使用這種方式實現爬蟲純粹是是某些人(大佬們)能力的體現,卻不是明智和合理的選擇。 # 4.python: 能夠實現爬蟲。python實現和處理爬蟲語法簡單,代碼優美,支持的模塊繁多,學習成本低,具備很是強大的框架(scrapy等)且一句難以言表的好!沒有可是!
# 1.通用爬蟲:通用爬蟲是搜索引擎(Baidu、Google、Yahoo等)「抓取系統」的重要組成部分。主要目的是將互聯網上的網頁下載到本地,造成一個互聯網內容的鏡像備份。 1)搜索引擎如何抓取互聯網上的網站數據? a)門戶網站主動向搜索引擎公司提供其網站的url b)搜索引擎公司與DNS服務商合做,獲取網站的url c)門戶網站主動掛靠在一些知名網站的友情連接中 # 2.聚焦爬蟲:聚焦爬蟲是根據指定的需求抓取網絡上指定的數據。 例如:
獲取豆瓣上電影的名稱和影評,而不是獲取整張頁面中全部的數據值。
# 一、發起請求: 使用http庫向目標站點發起請求,即發送一個Request Request包含:請求頭、請求體等 # 二、獲取響應內容 若是服務器能正常響應,則會獲得一個Response Response包含:html,json,圖片,視頻等 # 三、解析內容 解析html數據:正則表達式,第三方解析庫如Beautifulsoup,pyquery等 解析json數據:json模塊 解析二進制數據:以b的方式寫入文件 # 四、保存數據 數據庫 文件
# URL的格式由三部分組成: ①第一部分是協議(或稱爲服務方式)。 ②第二部分是存有該資源的主機IP地址(有時也包括端口號)。 ③第三部分是主機資源的具體地址,如目錄和文件名等 # http協議: https://www.cnblogs.com/kermitjam/p/10432198.html # robots協議: https://www.cnblogs.com/kermitjam/articles/9692568.html # Request: 用戶將本身的信息經過瀏覽器(socket client)發送給服務器(socket server) # Response: 服務器接收請求,分析用戶發來的請求信息,而後返回數據(返回的數據中可能包含其餘連接,如:圖片,js,css等) # ps: 瀏覽器在接收Response後,會解析其內容來顯示給用戶,而爬蟲程序在模擬瀏覽器發送請求而後接收Response後,是要提取其中的有用數據。
#一、請求方式: 經常使用的請求方式:
GET,POST
其餘請求方式:
HEAD,PUT,DELETE,OPTHONS ps:用瀏覽器演示get與post的區別,(用登陸演示post) post與get請求最終都會拼接成這種形式:
k1=xxx&k2=yyy&k3=zzz
post請求的參數放在請求體內: 可用瀏覽器查看,存放於form data內
get請求的參數直接放在url後 #二、請求url url全稱統一資源定位符,如一個網頁文檔,一張圖片 一個視頻等均可以用url惟一來肯定 url編碼: https://www.baidu.com/s?wd=圖片 圖片會被編碼(看示例代碼) 網頁的加載過程是: 加載一個網頁,一般都是先加載document文檔,在解析document文檔的時候,遇到連接,則針對超連接發起下載圖片的請求。 #三、請求頭 User-agent:
請求頭中若是沒有user-agent客戶端配置,服務端可能將你當作一個非法用戶。
Cookies:
cookie用來保存登陸信息。
Referer:
瀏覽器上次訪問的網頁url
通常作爬蟲都會加上請求頭
#四、請求體 若是是get方式,請求體沒有內容 若是是post方式,請求體是format data ps: 一、登陸窗口,文件上傳等,信息都會被附加到請求體內 二、登陸,輸入錯誤的用戶名密碼,而後提交,就能夠看到post,正確登陸後頁面一般會跳轉,沒法捕捉到post
# 一、響應狀態: 200:表明成功 301:表明跳轉 404:文件不存在 403:權限 502:服務器錯誤 # 二、響應頭: Respone header set-cookie:可能有多個,是來告訴瀏覽器,把cookie保存下來。 # 三、網頁源代碼: preview 最主要的部分,包含了請求資源的內容,如網頁html、圖片和二進制數據等。
# 一、總結爬蟲流程: 爬取--->解析--->存儲 # 二、爬蟲所需工具: 請求庫:requests,selenium 解析庫:正則,beautifulsoup,pyquery 存儲庫:文件,MySQL,Mongodb,Redis # 三、爬蟲經常使用框架: scrapy