爬取中国石油大学校园文化主页中的图片
打开中国石油大学(华东)校园文化主页http://www.upc.edu.cn/xygk/xywh.htm 。 在当前文件夹动态建立一个目录images,将校名、校标等图片用爬虫爬取下来,并以对应的名称存储在images文件夹下。完成后的目录如下所示:
images
├── 石大精神.png
├── 学风.png
├── 校名.png
├── 校旗.png
├── 校标.png
├── 校歌.png
├── 校训.png
└── 校风.png
注意:images文件夹一定是以 代码形式动态建立 ,手工建立的无效。新建之前一定要检查文件夹是否存在,如果存在则不建立。
提示:
1) 得到的图片是一个相对地址,需要在前面加上http://www.upc.edu.cn形成完整的链接。例如校歌图片的链接为/__local/8/2D/0D/5CA8B3D8EAE84524B99DA08A212_05DA246B_299BE.png ,需要转换为http://www.upc.edu.cn/__local/8/2D/0D/5CA8B3D8EAE84524B99DA08A212_05DA246B_299BE.png
2) 每个图片用其对应的名称进行重命名,图片后缀不变。例如校歌的图片重新命名为“校歌.png"
3) 校庆日中没有图片,对于这个异常,可以用try except结构处理,具体用法自行查找学习
import os
import requests
from bs4 import BeautifulSoup as BS
from pathlib import Path
url = r'http://www.upc.edu.cn/xygk/xywh.htm'
url0 = r'http://www.upc.edu.cn'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
response = requests.get(url=url,headers = headers) #UA伪装,简单的防反爬机制
soup = BS(response.content,'lxml')
image_list = soup.find_all('div', class_="section") # 获取所有的照片信息
file =Path(f'{path}/images') #文件夹路径
folder = os.path.exists(file) # 判断文件夹是否存在
if not folder:
os.makedirs(file) # 不存在则生成
for detail in image_list:
name = detail.find("div",class_ = "hd").text.split()[0]
#获取名字,因为有的会带一部分(其他文字),所以只取第一个,可以吧末尾的[0]去掉,运行查看
try:
img_url0 = detail.find("img", class_="img_vsb_content")['src']#获取照片的部分url
img_url1 = url0 + img_url0#生成照片的url
root = Path(f'{path}/images/{name}.png') #生成照片的存放路径
if not os.path.exists(root): #判断照片是否存在
r = requests.get(img_url1)
with open(root,'wb') as f:
f.write(r.content) # 将图片的信息存入
except:
pass