爬取优美图库图片

# 爬取优美图库美女写真页面,共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("爬取完成!")  
posted @ 2021-09-12 15:35  越自律越自由  阅读(1758)  评论(0)    收藏  举报