python(五)——爬蟲(map,lambda)(20200108)

一、實驗一——PyQuery爬蟲

二、實驗二——爬取王者榮耀皮膚

代碼來自:https://blog.csdn.net/qq_42453117/article/details/103190981

其中有詳細關於代碼的解釋。我只是借用這個代碼來補充一下python知識。

import os
import requests

url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 獲取英雄列表json文件

herolist_json = herolist.json()  # 轉化爲json格式
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的編號


# 下載圖片
def downloadPic():
    i = 0
    for j in hero_number:
        # 創建文件夾
        os.mkdir("C:\\Users\\C\\Desktop\\wzry\\" + hero_name[i])
        # 進入創建好的文件夾
        os.chdir("C:\\Users\\C\\Desktop\\wzry\\" + hero_name[i])
        i += 1
        for k in range(10):
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
                j) + '-bigskin-' + str(k) + '.jpg'
            im = requests.get(onehero_link)  # 請求url
            if im.status_code == 200:
                open(str(k) + '.jpg', 'wb').write(im.content)  # 寫入文件


downloadPic()

 1、lambda函數。

也叫匿名函數,沒有具體的函數名稱,它允許快速定義單行函數,可以用在任何需要函數的地方。區別於def定義的函數。

def與lambda區別:

(1)def創建函數是有名稱的,而lambda沒有。

(2)lambda會返回一個函數對象,但這個對象不會賦給一個標識符,而def則會把函數對象賦值給一個變量。

(3)lambda只是一個表達式,而def則是一個語句。

(4)lambda表達式“:”後面,只能有一個表達式,而def可以有多個。

(5)像if或for或print等語句不能用於lambda中。

(6)lambda一般用來定義簡單的函數,而def則可以定義複雜的函數。

例:

(1)單參數

g = lambda x: x**2
print(g(3))

'''
9
'''

(2)多參數

g = lambda x, y, z : (x + y)**z
print(g(1,2,3))

'''
27
'''

 2、map函數

map(lambda x:x*x, [y for y in range(10)])

map函數,它可以將一個函數映射到一個可枚舉類型上面。

a = [1, 2, 3]
f = lambda x:x+1
map(f,a)

map(f, a)就是將函數f依次套用在a的每一個元素上面,獲得結果[2, 3, 4]。現用lambda表達式來替換f.

這個用法就類似於爬蟲中所述的代碼形式。

語法:

map( function, iterable, …)

function……函數

iterable……一個或多個序列

返回值

python2 返回列表

python3 返回迭代器

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