# 爬取优美图库美女写真页面,共149页,每个页面30个图片,点击每个图片进入子页面
# 每个子页面又有不等的翻页页面(6-25个),每个子页面有图片的超清图片
# 本程序只爬取美女写真的第一页30个图片对应的子链接里面的6-25个超清图片
# 本程序所有页面都为静态页面
import requests
from bs4 import BeautifulSoup
from concurrent.futures import ProcessPoolExecutor
def downloadImg(imgUrl, imgPath):
with open(imgPath, "wb") as f:
f.write(requests.get(imgUrl).content)
print(f"{imgPath}---下载完成.")
if __name__ == '__main__':
# 从美女写真第一页地址,请求解析出30个图片对应的a标签
url = 'https://www.umei.cc/meinvtupian/meinvxiezhen/'
resp = requests.get(url)
soup = BeautifulSoup(resp.content.decode(), "html.parser")
alist = soup.select("div .TypeList a") # 找到class是Typelist的div标签下的所有a标签
# alist = soup.find("div", attrs={"class": "TypeList"}).find_all("a")
with ProcessPoolExecutor(10) as t: # 定义10个进程池
for a in alist:
# 得到子页面的url,如第一页234627.htm,第二页为234627_2.htm
href = "https://www.umei.cc" + a.get("href")
hrefNext = href
for i in range(1, 100): # 循环设定为100次,超过最后一页,返回404错误
if i != 1:
hrefNext = href.rsplit('.', 1)[0] + f'_{i}.htm'
resp1 = requests.get(hrefNext)
if resp1.status_code == 404:
break # 本子页面的翻页页面都完成,退出循环
subHtml = resp1.content.decode()
subSoup = BeautifulSoup(subHtml, "html.parser")
# 找到class属性是ImageBody的div标签,再在里面找img标签,提取其src属性
imgUrl = subSoup.find("div", attrs={"class": "ImageBody"}).find("img").get("src")
imgPath = "./img/" + subSoup.find("strong").text + f'_{i}' ".jpg" # 页面中就一个strong标签
# 发送请求得到图片保存在本地,用进程池
t.submit(downloadImg, imgUrl, imgPath)
print("爬取完成!")