Python爬蟲從入門到放棄 03 | Python爬蟲中的高級用法

此博客僅爲我業餘記錄文章所用,發佈到此,僅供網友閱讀參考,如有侵權,請通知我,我會刪掉。
本文章純野生,無任何借鑑他人文章及抄襲等。堅持原創!!

前言

你好。這裏是Python爬蟲從入門到放棄系列文章。我是SunriseCai。

本文章主要介紹一下Python爬蟲過程中可能會常用到的Python高級語法。

Python高級函數

lambda表達式Python中一類特殊的定義函數的形式,使用它可以定義一個匿名函數

  • 語法:lambda argument_list: expressionargument_list爲傳入的參數,expression爲表達式,這一整個叫做lambda函數)

  • 基本示例:

lambda_eg = lambda x,y : x*y	# 輸出傳入的兩個值的乘積
print(lambda_eg (2, 3))	# 6 

lambda有多種用法,這裏只對經常用到的用法做介紹。

方法 描述
sorted() sorted() 函數對所有可迭代的對象進行排序操作。
filter() 用於過濾序列,過濾掉不符合條件的元素,返回迭代器
map() 參數序列中的每一個元素都調用函數,返回迭代器
zip() 用於將可迭代的對象作爲參數,將對應元素打包成多個元組
  • sorted():
list_eg = [70, 45, 37, 127, 148, 26, 121]
sorted_eg = sorted(list_eg, key=lambda x: x)	# 這裏不加lambda函數也是返回一樣的結果
print(sorted_eg)	# [26, 37, 45, 70, 121, 127, 148]

# sorted_eg = sorted(list_eg, key=lambda x: x,reverse=True)	# 添加reverse=True,爲倒序輸出
# print(sorted_eg)[148, 127, 121, 70, 45, 37, 26]
  • filter():
list_eg = [70, 45, 37, 127, 148, 26, 121]
is_even = filter(lambda x: x % 2 == 0, list_eg)	# 判斷爲偶數就輸出
print(list(is_even ))	# [70, 148, 26] 因爲輸出的是迭代器,所以轉換爲list再輸出
  • map():
list_eg = [70, 45, 37, 127, 148, 26, 121]
square = map(lambda x: x ** 2, list_eg)	# 輸出平方
print(list(square))
  • zip():
values = [70, 45, 37, 127, 148, 26, 121]
dogs = ['哈士奇', '薩摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
dict_dogs = zip(dogs, values)	# 遍歷兩組元素,返回元組
print(dict(dict_dogs))	# 轉換成字典再輸出
# {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127, '牧羊犬': 148, '吉娃娃': 26, '柯基': 121}

Python推導式

推導式提供了從一個數據序列創建其它的數據結構的簡單途徑。換句話說就是可以減少代碼量。共三種推導式,分別是列表推導式字典推導式以及集合推導式。下來看看看他們的使用方法。

  • Python列表推導式(list)
  • 以建立一個10以內可以整除2的列表爲例:

常規寫法:

values = [70, 45, 37, 127, 148, 26, 121]

list_even = []
for i in values:
    if i % 2 == 0:
        list_even.append(i)

print(list_even)	# [70, 148, 26]

列表推導式:

values = [70, 45, 37, 127, 148, 26, 121]

list_even = list(i for i in values if i % 2 == 0)
print(list_even)	# [70, 148, 26]

  • Python字典推導式(dict)
  • 以兩個列表做鍵值對,建立成一個字典爲例。

常規寫法:

dogs = ['哈士奇', '薩摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
values = [70, 45, 37, 127, 148, 26, 121]

dict_dogs = {}
for k, v in zip(values, dogs):
    dict_dogs[k] = v
    
print(dict_dogs)
# {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127, '牧羊犬': 148, '吉娃娃': 26, '柯基': 121}

字典推導式:

dogs = ['哈士奇', '薩摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
values = [70, 45, 37, 127, 148, 26, 121]

dict_dogs = {i[0]: i[1] for i in zip(dogs, values)}
print(dict_dogs)
# {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127, '牧羊犬': 148, '吉娃娃': 26, '柯基': 121}

  • Python集合推導式(set)
  • 以將一個列表內的值求平方,輸入到集合中再輸出

常規寫法:

values = [70, 45, 37, 127, 148, 26, 121]

square = []
for i in values:
    square.append(i ** 2)	# 求平方且存入到新列表
set_square = set(square)	# 列表轉換爲集合

print(set_square)	# {16129, 4900, 676, 2025, 21904, 14641, 1369}

集合推導式:

values = [70, 45, 37, 127, 148, 26, 121]

set_square = {i ** 2 for i in values}
print(set_square)	# {16129, 4900, 676, 2025, 21904, 14641, 1369}

通過上面的推導式例子,是不是已經覺得推導式可以減少很多代碼量了呢!!

其他常用

這裏示例幾個例子。分別是

方法1 方法2
字典根據 排序 字典根據 排序
  • 字典(dict)排序,根據鍵排序 值排序
  • 注意一下:如果字典(dict)的鍵值是字符而不是整數,這時使用int(str)轉換爲整數即可。

字典根據 排序:

dict_dogs = {31: '哈士奇', 20: '薩摩耶', 3: '泰迪', 24: '金毛'}
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[0]))	# 正序
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[0], reverse=True))	# 倒序
print(dict_order_dogs)	# {3: '泰迪', 20: '薩摩耶', 24: '金毛', 31: '哈士奇'}

字典根據 排序:

dict_dogs = {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127}
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[1]))	# 順序
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[1], reverse=True))	# 倒序
print(dict_order_dogs)	# {'金毛': 127, '哈士奇': 70, '薩摩耶': 45, '泰迪': 37}

  • 後續再繼續補充更多語法。

以上,便是本章的所有內容了。
在實際編程過程中,會用到的語法數不勝數,不勝枚舉,這裏只將很少一部分常用的語法記錄下來。在編程過程中,各位靈活使用各種語法即可!!


最後來總結一下本章的內容:

  1. 介紹了lambda函數的使用
  2. 介紹了Python三個推導式的使用
  3. 介紹了Python根據字典(dict)的排序

sunrisecai

  • 感謝你的耐心觀看,點關注,不迷路。
  • 爲方便菜雞互啄,歡迎加入QQ羣組織:648696280

下一篇文章,名爲 《Python爬蟲從入門到放棄 04 | Python爬蟲打響第一炮之請求網頁》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章