# 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')