經過程序模擬瀏覽器請求站點的行爲,把站點返回的HTML代碼/JSON數據/二進制數據(圖片/視頻)爬到本地,進而提取本身所需的數據,存放起來使用。javascript
獲取網絡數據的方式:html
①.瀏覽器提交請求→下載網頁代碼→解析成網頁java
②.模擬瀏覽器發送請求(獲取網頁代碼)→提取有用的數據→存放在數據庫或文件中 [爬蟲所要作的]python
發送請求→獲取響應內容→解析內容→保存數據mysql
使用http庫向目標站點發起請求,即發送一個Request正則表達式
Request包含:請求頭、請求體等
sql
Request模塊缺陷:不能執行JS和CSS代碼數據庫
服務器正常響應,則會獲得一個Responceapache
Response包含:html,json,圖片,視屏等 json
解析html數據:正則表達式(RE模塊),第三方解析庫如Beautifulsoup,pyquery等
解析json數據:json模塊
解析二進制數據:以wb的方式寫入文件
數據庫(MySQL,Mongdb,Redis)
Request:用戶將本身的信息經過瀏覽器(socket client)發送給服務器(socket sever)
Response:服務器接收請求,分析用戶發來的請求信息,而後返回數據
瀏覽器在接收到Responce後,會解析其內容來顯示給用戶,而爬蟲程序在模擬瀏覽器發送請求而後接收Response後,是要提取其中有用的數據。
Request{
①.請求方式(常見的):GET/POST
②.請求的URL:url全球統一資源定位符,用來定義互聯網上的一個惟一的資源,如一張圖片、一個文件、一段視頻均可以用url惟一肯定
網頁加載過程:加載一個網頁,一般都是先加載document文檔,在解析document文檔的時候,遇到連接,則針對超連接發起下載圖片的請求
③.請求頭(通常爬蟲都會加上請求頭):
User-agent:請求頭中若是沒有user-agent客戶端配置,服務器可能將你看成一個非法用戶host;
cookies:cookies用來保存登陸信息
請求頭須要注意的參數:
1.Referrer:訪問源哪裏來的(一些大型網站,會經過Referrer作防盜鏈策略,全部爬蟲也要注意模擬)
2.User-agent:訪問的瀏覽器(要加上不然會被當成爬蟲程序)
3.cookie:請求頭注意攜帶
④.請求體
若是是get方式,請求體沒有內容(get請求的請求體放在url後面參數中,直接能看到)
若是是post方式,請求體是format data
ps:登陸窗口、文件上傳等,信息都會被附加到請求體內;登陸,輸入錯誤的用戶密碼,而後提交,就能夠看到post,正確登陸後頁面一般會跳轉,沒法捕捉到post
⑤.響應Response
1.響應狀態碼:
202:表明成功
301:表明跳轉
404:文件不存在
403:無權限訪問
502:服務器錯誤
2.response header
響應頭須要注意的參數:
Set-Cookies:BDSVRTM=0;path=/:可能有多個,是來告訴瀏覽器,把cookie保存下來
Content-Location:服務端響應頭中包含Location返回瀏覽器以後,瀏覽器就會從新訪問另外一個頁面
Preview就是網頁源代碼 JSON數據 如網頁html,圖片 二進制數據等
}
爬蟲流程:爬取→解析→存儲
爬蟲所需工具:
請求庫:request,selenium
解析庫:正則,beautifulsoup,pyquery
存儲庫:文件,MySQL,Mongdb,Redis
1.數據庫的鏈接
前置條件:服務器ip 端口號 用戶名 密碼 數據庫名
安裝第三方庫:MySQLdb(運行MySQL-python-1.2.5.win32-py2.7.exe)
2.建立數據庫
a.鏈接數據庫,建立數據庫庫名
b.建立表,插入數據(插入數據要有commit)
c.查詢數據、修改數據(修改數據也要commit)
d.刪除數據庫 drop database db1
e.以函數形式操做數據庫
1.安裝第三方庫cx_oracle
運行msi文件(cx_Oracle-5.1.2-11g.win32-py2.7.msi);而後將instantclient_11_1.rar解壓,將文件夾內的8個以dll爲後綴的文件複製粘貼至X:\Python27\Lib\site-packages內
2.操做數據庫(oracle沒有database)
1.各類端口號
mysql:3306
oracle:1521
apache:80
ftp:21
telnet:23
tomcat:8080
ssh:22
堆、棧、隊列之間的區別是?
①堆是在程序運行時,而不是在程序編譯時,申請某個大小的內存空間。即動態分配內存,對其訪問和對通常內存的訪問沒有區別。
②棧就是一個桶,後放進去的先拿出來,它下面原本有的東西要等它出來以後才能出來。(後進先出)
③隊列只能在隊頭作刪除操做,在隊尾作插入操做.而棧只能在棧頂作插入和刪除操做。(先進先出)
函數(function)是能夠執行的javascript代碼塊,由javascript程序定義或javascript實現預約義。函數能夠帶有實際參數或者形式參數,用於指定這個函數執行計算要使用的一個或多個值,並且還能夠返回值,以表示計算的結果。【函數名(參)】
方法(method)是經過對象調用的javascript函數。也就是說,方法也是函數,只是比較特殊的函數。假設有一個函數是fn,一個對象是obj,那麼就能夠定義一個method【對象名.方法名()】
類中的函數稱爲方法。
函數是一段代碼,經過名字來進行調用。它能將一些數據(參數)傳遞進去進行處理,而後返回一些數據(返回值),也能夠沒有返回值。
全部傳遞給函數的數據都是顯式傳遞的。
方法也是一段代碼,也經過名字來進行調用,但它跟一個對象相關聯。方法和函數大體上是相同的,但有兩個主要的不一樣之處:
以上只是簡略的解釋,忽略了做用域之類的問題。