response = request.urlopen(url)data = response.read()了解了上述過程,來理解這個代碼是不是就很簡單了。首先,我們通過request網址url創建了一個變量response,然后從response中讀取數據。那么現問題來了,request我們可沒有定義過,從哪冒出來的?他是什么東西?后面跟個.urlopen()是什么意思?response是我們自己定義的一個變量,后來也跟了一個.read(),這又是什么鬼,是不是所有的變量都可以跟呢?除了第一個問題,全部不解釋!為什么?因為現在就解釋了,以后就沒得寫了。而且只有兩行代碼,看著眼熟就行,現在先記著,以后說到相關的知識點了解釋。request從哪來的呢?從urllib模塊里面來的!urllib從哪來的?python自帶的!模塊是什么?隨著項目越來越大,代碼越來越多,就需要分組進行維護管理,這就是模塊的來由,在python中,一個.py文件就是一個模塊!怎么使用別人寫的模塊?引用進來,比如我們要引用urllib整個模塊,就需要在文件開頭加入import urllib;如果只引用urllib模塊中的requset這一部分,就在文件開頭加from urllib import request。好了,現在輪到我提問題了,假設,我要同時獲取三個不同url的數據,怎么辦?答案:response1 = request.urlopen(url1)data1 = response.read()response2 = request.urlopen(url2)data2 = response.read()response3 = request.urlopen(url3)data 3= response.read()輕松自在,可以實現,滿分!如果阿里的程序員靠代碼行數來算工資,你能寫到馬云爸爸破產!但是這特么也太蠢了。還記得我們上期說的函數么,f(x)=3x + 111。當x有很多的時候,使用f(x1),f(x2)。。。f(xn)比使用3x1+111。。。。3xn+111是不是清爽很多。所以到了編程里面,會把一段需要經常重復的代碼封裝在一起,構成一個函數,比如我們的那一段代碼,是為了獲得某個網址的數據(HTML)的,我們就取一個名字叫getHTML(url)={response = request.urlopen(url)data = response.read()}以后url2,url3就用getHTML(url2),getHTML(url3)就可以了。但是,這么寫,是數學里面的做法,在python里面,是這樣的:一個個來說:def,固定的,不變。函數名:跟變量名一樣,隨便自己取,不過,最好是能表明他的功能的。參數:用括號闊起來,函數可以沒有參數,也可以有多個參數。至于python里面的默認參數,可變參數,關鍵字參數,命名關鍵字參數傻的,本文全部不講,為什么,因為本項目用不著。冒號:固定的,英文字符,不要打成了中文字符的冒號。縮進:還記得上期說過,python里面用縮進表示代碼之間的邏輯關系。現在看就比較明顯了吧,下面的函數體和返回值都是這個函數的內容,所以縮在他的羽翼之下。至于縮進多少,看心情,沒有規定,但是同一邏輯層級的代碼縮進一定要一樣。不過習慣上是一個tab鍵。函數體:就是我們要執行的任務了返回值:比如上文說的數學上的函數,a=f(3),編程的函數也是一樣,只不過用return標記。想返回data,就return data。如果返回值為None,可以簡寫為return。
所以我們的代碼就改版啦:
from urllib import requestname = "胡歌"first = 1count = 28url = "http://cn.bing.com/images/search?q=" +name + "&first=" + str(first) +"&count=" + str(count)def getHTML(url): response = request.urlopen(url) data = response.read() return datahtml = getHTML(url)好了,函數已經講完了。但是有沒有同學發現,我這期一點動圖都沒有,從頭到尾沒有運行?有沒有勤學苦練的同學自己運行了?哈哈,因為運行不成功的,為什么呢?下期繼續。
歡迎關注我的微信公眾號獲取最新文章:
新聞熱點
疑難解答