通过新东方网站下载教师头像
import requests
from bs4 import BeautifulSoup
import os
# 通过图片网页地址,写入到本地
def get_image(url,fn):
resp =requests.get(url)
with open('头像\{}.png'.format(fn),'wb') as f:
f.write(resp.content) # 图片要要通过二进制格式写入
# 获取网页、网页解析
def loan_image(url):
while True:
r = requests.get(url)
soup = BeautifulSoup(r.text)
for jj in soup.select('dl[class="clearfix"]'):
for dt in jj.find_all('dt'):
img_ad = dt.img.attrs['src']
name = dt.h3.a.string
for dd in jj.select('p[class="ppl2 clearfix"]'):
class_name = dd.em.string
get_image(img_ad,name+'-'+class_name) # 此处用到前一个函数
if soup.find_all('a',class_='end'): # []空列表表示False,非空表示True
url = url+soup.find_all('a',class_='end')[0].attrs['href']
else:
break
# 通过新东方太原地区网站下载教师头像
url = 'https://laoshi.xdf.cn/21/category?part=190&p=1'
os.chdir(r'C:\Users\99452\Desktop')
loan_image(url)
- 上面代码写的过程中遇到的情况注意一下:
# 下面两段代码返回的内容不一致:
# 这个就仅仅返回dl标签中class属性为'clearfix'的标签
for jj in soup.select('dl[class="clearfix"]'):
print(jj)
# 如下不仅返回dl标签中class属性为'clearfix',还返回了class属性为'clearfix sx'的等,属于多值属性,不知道用find什么方法可以解决
for jj in soup.find_all('d1',class_="clearfix"):
print(jj)
参考
1、CDA课程
2、新了解的知识点:if/while语句中的True/False