python的變量與java的不一樣,java的變量是固定類型的,而python的變量也是對象引用。以下是小編為你整理的0基礎(chǔ)怎么自學(xué)python ?
首先是理解對象引用,對象引用就是映射關(guān)系 ?
比如,你在超市的儲物柜1號放了個包裹,那么你得到一張票據(jù),上面寫著A ?
那么,這個A就是引用了這個格子 ?
標識符-等號-對象,比如,A = 123
?
那么,A是標識符,123是對象 ?
注意:標識符的大小寫是區(qū)分的,ABC與Abc與abc,是不同的標識符 ?
如果之前接觸過java,這個理解起來會有點不一樣,python的變量就是對象引用,與java的變量存儲在棧內(nèi)存是不一樣 ?
比如A=1,B=A,那么結(jié)果是A和B都指向1 ?
假如這時候,A=2,那么A會指向2,B不會跟著改變,則還是指向1 ?
所以說,A指向另外一個引用的時候,是直接指向另外一個引用所引用的對象的 ?
換成代碼,則是下面這樣,首先A指向1號,然后B指向A,再把A的指向2號 ?
這樣的情況下,B不會跟著改變 ?
還有重要的一點,就是對象不會隨著沒有被引用而馬上消失,假設(shè)A和B都是指向1,然后A和B又指向2,那么1沒有被引用了,但是還是會存在的 ?
用代碼演示就是 ?
A=1,打印A的內(nèi)存地址 ?
A=2,打印A的內(nèi)存地址 ?
A=1,打印A的內(nèi)存地址 ?
A=2,打印A的內(nèi)存地址 ?
如果對象沒有被清除,那么4次打印內(nèi)存地址,13次地址數(shù)值是相同的,24次也一樣 ?
底部的內(nèi)存地址,即使對象再次被引用的時候,還是原來的地址。 ?
如何搭建環(huán)境學(xué)習(xí)爬蟲首先學(xué)習(xí)Python,建議通過**mooc和《笨方法學(xué)Python》來實現(xiàn)入門,那本書的內(nèi)容可以有所取舍。通過這兩個途徑再上網(wǎng)上針對性地查找相關(guān)內(nèi)容完全可以入門,重點在于理解“面向?qū)ο蟆薄? ?
爬蟲入門首先要明白一些網(wǎng)絡(luò)技術(shù),了解TCP/IP參考模型,并且對應(yīng)用層的HTTP協(xié)議的方法和工作原理有一定的認識。爬蟲爬取網(wǎng)頁內(nèi)容,大多數(shù)網(wǎng)頁服務(wù)由HTTP協(xié)議實現(xiàn)。 ?
正式學(xué)習(xí)爬蟲庫urllib和正則表達式,urllib靈活性很高,并且和你所學(xué)的網(wǎng)絡(luò)原理、HTTP原理非常貼合,利于新手學(xué)習(xí),正則表達式看看內(nèi)容,再看幾個實例就應(yīng)該會用了,不推薦看亂七八糟的教程和MOOC(效果非常差,講的跨度太大),推薦書籍《精通Python網(wǎng)絡(luò)爬蟲 核心技術(shù)、框架與項目實戰(zhàn) 》(韋瑋)。同樣是選擇性的閱讀。 ?
學(xué)習(xí)完成之后,多加實踐,推薦實戰(zhàn)項目:1、爬取漫畫網(wǎng)上的一部漫畫的所有圖片,并用PowerPoint做成PDF 2、爬取電影下載網(wǎng)站上的所有電影下載鏈接并整理到Excel。能獨立完成這兩個實戰(zhàn)項目,恭喜你已經(jīng)成功入門! ?
構(gòu)造一個三維數(shù)組
import numpy as npa = np.random.rand(3,3,5) ?
np.floor是一個ufunc函數(shù),它是一個一元函數(shù)——取整函數(shù),可以做用于a里面的每一個數(shù)字,且保持數(shù)組結(jié)構(gòu)不變,仍舊是三維的3*3*5的數(shù)組: ?
類似的一元ufunc函數(shù)還有很多,比如所有的初等數(shù)學(xué)函數(shù): ?
print(np.sin(b),'n',np.cos(b)) ?
np.add是一個多元的ufunc函數(shù): ?
b = np.add.reduce(a) ?
這里,reduce的作用,是把add函數(shù)作用于數(shù)組a的*層每一個子數(shù)組,計算這些元素的和。 ?
具體的作用結(jié)果是: ?
c = []for j in range(3): d = [] for i in range(5): #print(a[:,j,i],'t',sum(a[:,j,i])) d.append(sum(a[:,j,i])) c.append(d)print(np.array(c)) ?
b = np.add.reduce(a,axis = 1) ?
這里指定了add作用于a的第二層子數(shù)組,具體如下: ?
c = []for j in range(3): d = [] for i in range(5): #print(a[j,:,i],'t',sum(a[j,:,i])) d.append(sum(a[j,:,i])) c.append(d)print(np.array(c)) ?
b = np.add.reduce(a,axis = 2) ?
將add函數(shù)作用于a的第三層子數(shù)組: ?
print(sum(a[0,0]))
?
給出一個一維數(shù)組: ?
import numpy as npa = np.floor(np.random.rand(6)*10) ?
從左往右累計a里面的元素之和: ?
b = np.add.accumulate(a) ?
具體的類似于: ?
c = 0d = []for i in range(6): c = c+a[i] d.append(c) print(np.array(d))
?
urllib.request
urllib.request 模塊期初是用來打開和獲取 URL 的。讓我們看看你可以用函數(shù) urlopen 可以做的事: ?
>>> import urllib.request >>> url = urllib.request.urlopen('https://www.google.com/') >>> url.geturl() 'https://www.google.com/' >>> url.info() >>> header = url.info() >>> header.as_string() ('Date: Fri, 24 Jun 2016 18:21:19 GMT/n' 'Expires: -1/n' 'Cache-Control: private, max-age=0/n' 'Content-Type: text/html; charset=ISO-8859-1/n' 'P3P: CP="This is not a P3P policy! See ' 'https://www.google.com/support/accounts/answer/151657?hl=en for more info."/n' 'Server: gws/n' 'X-XSS-Protection: 1; mode=block/n' 'X-Frame-Options: SAMEORIGIN/n' 'Set-Cookie: ' 'NID=80=tYjmy0JY6flsSVj7DPSSZNOuqdvqKfKHDcHsPIGu3xFv41LvH_Jg6LrUsDgkPrtM2hmZ3j9V76pS4K_cBg7pdwueMQfr0DFzw33SwpGex5qzLkXUvUVPfe9g699Qz4cx9ipcbU3HKwrRYA; ' 'expires=Sat, 24-Dec-2016 18:21:19 GMT; path=/; domain=.google.com; HttpOnly/n' 'Alternate-Protocol: 443:quic/n' 'Alt-Svc: quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"/n' 'Accept-Ranges: none/n' 'Vary: Accept-Encoding/n' 'Connection: close/n' '/n') >>> url.getcode() 200 ?
在這里我們包含了需要的模塊,然后告訴它打開 Google 的 URL?,F(xiàn)在我們就有了一個可以交互的 HTTPResponse 對象。我們要做的*件事是調(diào)用方法 geturl ,它會返回根據(jù) URL 獲取的資源。這可以讓我們發(fā)現(xiàn) URL 是否進行了重定向。 接下來調(diào)用 info ,它會返回網(wǎng)頁的元數(shù)據(jù),比如請求頭信息。因此,我們可以將結(jié)果賦給我們的 headers 變量,然后調(diào)用它的方法 as_string 。就可以打印出我們從 Google 收到的頭信息。你也可以通過 getcode 得到網(wǎng)頁的 HTTP 響應(yīng)碼,當(dāng)前情況下就是 200,意思是正常工作。 ?
如果你想看看網(wǎng)頁的 HTML 代碼,你可以調(diào)用變量 url 的方法 read。我不準備再現(xiàn)這個過程,因為輸出結(jié)果太長了。 ?
請注意 request 對象默認發(fā)起 GET 請求,除非你指定了它的 data 參數(shù)。如果你給它傳遞了 data 參數(shù),這樣 request 對象將會變成 POST 請求。部分內(nèi)容選自《Linux就該這么學(xué)》感興趣的可以看下哦