關於while循環與for循環

首先看for循環

def test():
    print('1')
    print('2')

for i in range(3):
    test()

執行後的結果,按照下圖所示,for循環就是把指定的函數重複執行N次,這裏是3次

 

 

再看看while循環

def test():
    print('1')
    print('2')


while(2):
    test()

看結果,我這裏是用ctrl+v手動結束的,按照上面的代碼while循環的效果就是,每一執行兩遍test函數,然後一直循環下去,一直到手動停止

 

 

 

while循環一般用於條件類判斷循環

比如獲取一個圖片列表,如果列表爲空,則一直獲取,知道獲取到內容未知

下面的腳本就是典型的while循環應用

 通過獲取圖片列表長度是否空,判斷是否循環執行

import os.path
import time

from lxml import etree

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'referer': 'https://wallroom.io/',
    'sec-fetch-dest': 'image'
}

def get_images_list():
    response = requests.get(
        'https://wallroom.io/',
        headers=headers
    ).text
    html = etree.HTML(response)
    return html.xpath('//div[@class="image-list"]/div/a/@href')

def run():
    images_list = get_images_list()
    if not len(images_list):
        print('獲取圖片列表失敗')
        return False
    if not os.path.exists('圖片採集'):
        os.mkdir('圖片採集')
    url = 'https://wallroom.io/img/'
    for images in images_list:
        splits = images.split('/')
        resolving = splits[1]
        name_split = splits[2]
        file_name = '圖片採集/' + resolving + '-' + name_split + '.jpg'
        if not os.path.exists(file_name):
            images_content = requests.get(
                url + resolving + '/' + name_split + '.jpg',
                headers=headers
            )
            if 'image' in images_content.headers['Content-Type']:
                print(name_split + '.jpg')
                with open(file_name, 'wb') as f:
                    f.write(images_content.content)

if __name__ == '__main__':
    while True:
        run()
        time.sleep(10)

 

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