目錄html
想學爬蟲仍是 python 專業啊,以前一直在用 java, 如今決定嚐嚐鮮,使用 python及爬蟲框架來完成網絡數據採集。
編程語言之間都是相通的,好比都須要模塊化,引入其餘文件來實現功能,使用列表等容器來處理數據,都要使用 json
或 xml
來解析和傳輸數據。
你會發現經過 類比 的方式,帶着問題去學習,你會發現走的很快
並且我認爲代碼示例的做用是 異常強大的, 我會盡可能使用代碼示例的方式來展現,以知足同窗快速學習的須要,也備後續查詢。java
下面就是在 使用 python 過程當中的問題總結,okay,讓咱們一塊兒來歷險吧~python
不論是哪一種語言,用的最多的類型估計都是 string (字符串),要想快速入門 python, 掌握 string 也是必須的。算法
在 java 中使用最多的 string 功能,我也會帶着一樣的疑問來了解 python 該使用什麼方法實現。若是這裏沒有你要找的方法,能夠到 python string 官方地址完整方法去查詢編程
+
號來拼接,要注意的是,當有數字的時候必定要轉化爲字符串格式 str(value)
纔可以相加,否則會報錯。hour = 9 minutes = 45 print('it\'s %d:%d minutes!' %(hour, minutes))
# 對字符串分割 split_str = 'a-b-c-d' print(split_str.split('-'))
# 獲取字符串的長度 print(len('banana'))
# 以 - 作間隔,拼接字符串 join_str_list = ['a', 'b', 'c', 'd'] print('-'.join(join_str_list)) # 這裏就是用 - 拼接後的值
str.replace(old, new[, count])
count
表示替換的次數,若是沒有指定,則只會替換第一個遇到的json
去除字符串中空格分爲 3 種網絡
# 去除字符串中的空格 strToStrip = ' abc ' print(strToStrip.strip()) # 去除兩端空格 print(strToStrip.lstrip()) # 去除左邊空格 print(strToStrip.rstrip()) # 去除右邊空格
child_str = 'abc' print('abcd'.find(child_str)) # 若是存在就返回首字母下標,不存在返回 -1
學過 java 的都知道,在 java 中使用最多的容器有 List
, Map
, Set
, Array
,這些容器可讓咱們方便的存儲並操做數據,那麼 python 中又有哪些相似的容器可供咱們使用呢?數據結構
python 中也有列表,功能包含了 java 列表,並且更牛的是它能夠 包含不一樣類型的元素
。app
['a', 10, 1.5] # 這就是一個列表,只須要方括號包起來便可
有兩種方式可實現框架
list = ['a', 1, 1.4] for item in list: print(item)
在只須要讀取列表的元素自己時這種方式固然很優雅。但若是須要獲取元素的下標,就力不從心了,這就須要下面的方式。
list = ['a', 1, 1.4] for i in range(len(list)): list[i] = list[i] * 2 print(list[i])
pyton 中專門有切片操做符 :
, 想切多厚切多厚,這可比 java 要方便很多。
經過例子來感覺下吧。
alpha_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] print(alpha_list[1:3]) # ['b', 'c'] print(alpha_list[:4]) # ['a', 'b', 'c', 'd'] print(alpha_list[2:]) # ['c', 'd', 'e', 'f', 'g'] print(alpha_list[:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
有四種方式
append(value)
extend(list)
insert(index, value)
+
號,將兩個 list 直接相加, 會返回一個新的 list 對象碼字太多了,本身都暈了,直接上代碼。
list1 = ['a', 'b', 'c', 'd'] list1.append('e') print(list1) # ['a', 'b', 'c', 'd', 'e'] list2_1 = ['a', 'b', 'c', 'd'] list2_2 = ['e', 'f', 'g'] list2_1.extend(list2_2) print(list2_1) # ['a', 'b', 'c', 'd', 'e', 'f', 'g'] list3 = ['a', 'c', 'd'] list3.insert(1, 'b') # ['a', 'b', 'c', 'd'] print(list3) # 內存多餘消耗,不推薦 list4_1 = ['a', 'b'] list4_2 = ['c', 'd'] print(list4_1 + list4_2) # ['a', 'b', 'c', 'd']
也有幾種方法可實現
pop(index)
remove(value)
del(index)
del(index_begin, index_end)
上代碼
remove_list_1 = ['a', 'b', 'c'] print(remove_list_1.pop(0)) print(remove_list_1)# ['b', 'c'] remove_list_2 = ['a', 'b', 'c'] del remove_list_2[1] print(remove_list_2)# ['a', 'c'] remove_list_3 = ['a', 'b', 'c'] remove_list_3.remove('b') print(remove_list_3) # ['a', 'c'] remove_list_4 = ['a', 'b', 'c'] del remove_list_4[1:2] print(remove_list_4)# ['a', 'c']
dict 和 java 中 Map
很是相似,也是由 key
和 value
組成的,也是
使用 散列表 的算法存儲, 用過 java 的同窗就直接把它當作 Java HashMap 來用就能夠啦。另外,在語法上要比 java 也要簡潔很多。
a_dict = dict() # 這樣就建立了一個空字典 a_dict['one'] = 1 # 塞進去一個元素 not_empty_dict = {'one': 1, 'two': 2, 'three': 3} # 這是一個包含數據的字典
使用 for
循環遍歷全部字典,能夠遍歷字典中的 key,這樣的遍歷是沒有特定順序的,若是想按照順序遍歷須要使用內置函數 sorted
d = {'b': 2, 'a': 1, 'c': 3} for item_key in d: print(item_key, d[item_key]) for item_key in sorted(d): print(item_key, d[item_key])
那我若是想要遍歷 dict 中的 values 呢?
還真有一個方法叫 values()
, 它會返回一個值集合,並能夠應用 in
操做符遍歷
d = {'b': 2, 'a': 1, 'c': 3} for value in d.values(): print(value) for sorted_value in sorted(d.values()): print(sorted_value)
什麼是元組? java 中可沒有聽過內置元組這樣的數據結構。
在前面已經講了列表,知道一個列表能夠存儲多個數據結構。元組和列表很像,但要記住它們間的一個重要區別: 元組是不可變的。
tuple()
也能夠建立元組注意,因爲元組是不可變的,沒法修改它的元素。但咱們可使用將多個元組結合成一個新的元組。(元組也支持 +
)
tuple_a = 1, 2, 3, 4, 5 tuple_b = (1, 2, 3, 4, 5) # tuple 內置函數的參數必須是一個序列 tupe_c = tuple('12345') # 字符串 tuple_e = tuple([1, 2, 3, 4, 5]) # 列表 tuple_f = tuple((1,2,3,4,5)) # 元組 tuple_d = tuple_a + tuple_b print(tuple_d)
既然 python 中有這麼個數據結構,天然就有它的用武之地。還別說,它的用途還真很多。
a = 5 b = 4 a,b = b,a # 等式左邊是一個變量的元組 # 等式右邊是表達式的元組,能夠是(字符串,列表,元組都行) c,d = (1,2), [1,2,3] print(c) print(d)
def min_max(list): return min(list), max(list) num_list = [3, 1, 5, 2] print(min_max(num_list))
上面講述的都是一些大的主題,除了這些,還有一些相對小些的。
雖然小,但也很重要。這些小且重要的部分都在這個部分存放吧。
咱們知道 java 中因爲變量類型的存在,能夠在一個 class
內聲明全局變量,從而在 class 的各個方法中讀取和賦值。
而這點在 python 中倒是行不通的,由於 python 中沒有變量類型, 若是在文件中聲明一個全局變量,再在函數內對這個變量賦值,會直接致使錯誤產生。這是由於在函數內又從新建立了一個局部變量。讀取全局變量也有這個問題。
那該怎麼辦呢?嗯~o( ̄▽ ̄)o global
關鍵字就要登場了。
在函數內部,使用全局變量前,先用 global
關鍵字聲明下這個變量,表示這個變量是全局變量,後面再使用就 okay啦。
上栗子...
g_variable = 3 def test_g_variable(): global g_variable print(g_variable) # 3 g_variable = 2 print(g_variable) # 2 test_g_variable()
上面並無把 python 講完,還有 類和對象,文件,JSON處理, 網絡 等重要主題,這些會在下篇文章中涉及,敬請期待。