下载所有新东方在太原的英语讲师照片

# 

import requests
from bs4 import BeautifulSoup
import shutil
import string
import os


def get_img_url(url):
    img_url = []
    while True:
        resp = requests.get(url)
        soup = BeautifulSoup(resp.text, 'lxml')

        for dl in soup.select('dl[class="tea_list fix"]'):
            if '英语' in dl.select('p[class="h20"]')[0].text:
                img_url.append([dl.select('img[id="imgNewLogoUrl"]')[0].get('title').strip(),
                                dl.select('img[id="imgNewLogoUrl"]')[0].get('src')])

        if soup.select('a[class="nextlink"]'):
            url = 'http://souke.xdf.cn' + soup.select('a[class="nextlink"]')[0].get('href')
        else:
            print('跳出')
            break
    return img_url


def get_img(url,fn):
    resp = requests.get(url, stream=True)
    #默认情况下是false,他会立即开始下载文件并存放到内存当中,
    #倘若文件过大就会导致内存不足的情况.
    #当把get函数的stream参数设置成True时,它不会立即开始下载,
    #需要注意一点:文件没有下载之前,它也需要保持连接。
    with open('头像{}.png'.format(fn), 'wb') as out_file:
        shutil.copyfileobj(resp.raw, out_file)
        #从类文件对象src到类文件对dst。可选参数length指定缓冲区的大小,
        #负数表示一次性读入。默认会把数据切分成小块拷贝,以免占用太多内存
    del resp


if __name__ == '__main__':
    os.mkdir("头像")
    url_h = 'http://souke.xdf.cn/Teacher/21.html?teacherCode={}&pagesize=50'

    for letter in list(string.ascii_uppercase):
        #产生A-Z个字母,然后转化为列表
        print('page: ', letter)
        for name, url in get_img_url(url_h.format(letter)):
            #上一行代码将表明了,教师的排序是根据大写英文字母由低到高进行的。
            get_img(url, name)

    print('Done')
原文地址:https://www.cnblogs.com/topass123/p/13322805.html