python(爬蟲基礎、數據庫操做)、「堆」,"棧","堆棧","隊列"的區別、函數和方法的區別

python爬蟲

一.爬蟲   WHAT

 經過程序模擬瀏覽器請求站點的行爲,把站點返回的HTML代碼/JSON數據/二進制數據(圖片/視頻)爬到本地,進而提取本身所需的數據,存放起來使用。javascript

 

二.爬蟲   WAY   

獲取網絡數據的方式:html

①.瀏覽器提交請求→下載網頁代碼→解析成網頁java

②.模擬瀏覽器發送請求(獲取網頁代碼)→提取有用的數據→存放在數據庫或文件中   [爬蟲所要作的]python

 

發送請求→獲取響應內容→解析內容→保存數據mysql

 

1.發送請求

使用http庫向目標站點發起請求,即發送一個Request正則表達式

Request包含:請求頭、請求體等
sql

Request模塊缺陷:不能執行JS和CSS代碼數據庫

 

2.獲取響應內容

服務器正常響應,則會獲得一個Responceapache

Response包含:html,json,圖片,視屏等 json

 

3.解析內容

解析html數據:正則表達式(RE模塊),第三方解析庫如Beautifulsoup,pyquery等

解析json數據:json模塊

解析二進制數據:以wb的方式寫入文件

 

4.保存數據

數據庫(MySQL,Mongdb,Redis)

 

 三.爬蟲   WHY

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

 

Python數據庫操做:

一.mysql操做

1.數據庫的鏈接

前置條件:服務器ip  端口號  用戶名  密碼  數據庫名

安裝第三方庫:MySQLdb(運行MySQL-python-1.2.5.win32-py2.7.exe)

2.建立數據庫

a.鏈接數據庫,建立數據庫庫名

 

b.建立表,插入數據(插入數據要有commit)

 

 c.查詢數據、修改數據(修改數據也要commit)

 

d.刪除數據庫 drop database db1

e.以函數形式操做數據庫

 

二.oracle操做

 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)

 

三.Tips

1.各類端口號

mysql:3306

oracle:1521

apache:80

ftp:21

telnet:23

tomcat:8080

ssh:22

 

什麼是「堆」,"棧","堆棧","隊列",它們的區別

堆、棧、隊列之間的區別是?

①堆是在程序運行時,而不是在程序編譯時,申請某個大小的內存空間。即動態分配內存,對其訪問和對通常內存的訪問沒有區別。

②棧就是一個桶,後放進去的先拿出來,它下面原本有的東西要等它出來以後才能出來。(後進先出)

③隊列只能在隊頭作刪除操做,在隊尾作插入操做.而棧只能在棧頂作插入和刪除操做。(先進先出)

 

函數與方法的區別

 函數(function)是能夠執行的javascript代碼塊,由javascript程序定義或javascript實現預約義。函數能夠帶有實際參數或者形式參數,用於指定這個函數執行計算要使用的一個或多個值,並且還能夠返回值,以表示計算的結果。【函數名(參)】

  方法(method)是經過對象調用的javascript函數。也就是說,方法也是函數,只是比較特殊的函數。假設有一個函數是fn,一個對象是obj,那麼就能夠定義一個method【對象名.方法名()

 

類中的函數稱爲方法。

函數是一段代碼,經過名字來進行調用。它能將一些數據(參數)傳遞進去進行處理,而後返回一些數據(返回值),也能夠沒有返回值。

全部傳遞給函數的數據都是顯式傳遞的。

方法也是一段代碼,也經過名字來進行調用,但它跟一個對象相關聯。方法和函數大體上是相同的,但有兩個主要的不一樣之處:

  1. 方法中的數據是隱式傳遞的;
  2. 方法能夠操做類內部的數據(請記住,對象是類的實例化–類定義了一個數據類型,而對象是該數據類型的一個實例化)

以上只是簡略的解釋,忽略了做用域之類的問題。

相關文章
相關標籤/搜索