python爬取美女头像

import os
import re
import requests
import asyncio
import aiohttp


if not os.path.exists("./美女头像"):
    os.mkdir("./美女头像")

url = "https://www.ddtouxiang.com/touxiang/c-nvsheng"
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.34"
}
home_page_text = requests.get(url, headers=headers).text

# 使用正则提取帖子名称,使用帖子名称创建一个文件夹,存放这个帖子所有头像,提取到的第1个元素不需要,所以列表从第2个元素开始循环
for file in re.findall('title="(.*?)"', home_page_text)[1:]:
    # 判断文件是否存在,不存在则创建
    if not os.path.exists(f"./美女头像/{file}"):
        os.mkdir(f"./美女头像/{file}")


async def get_ulr():
    # 创建一个会话对象
    async with aiohttp.ClientSession() as session:
        # 提取帖子url的后半部分
        for i in re.findall('<a href="/(.*?)" title=', home_page_text)[1:]:
            # 拼接完整的url
            urls = "https://www.ddtouxiang.com/" + i
            # 获取每个帖子界面的html信息
            person_text = requests.get(urls, headers=headers).text
            # 提取每个图片的url
            img_url = re.findall('<a href="(.*?)" data-lightbox', person_text)
            # 提取每个帖子的名称
            img_name = re.findall('alt="(.*?)"></a>', person_text)
            # 同时遍历两个列表
            for url, name in zip(img_url, img_name):
                tasks = [asyncio.create_task(download_img(session, img_dic)) for img_dic in
                         {f"{name}": f"{url}"}.items()]
                await asyncio.wait(tasks)


async def download_img(session, img_dic):
    # 发起请求
    async with session.get(img_dic[1], verify_ssl=False) as response:
        # 获取图片二进制数据并且读取
        content = await response.content.read()
        img_path = fr".\美女头像\{img_dic[0][0:-4].strip()}\{img_dic[0][-3:-1].strip()}.jpg"
        with open(img_path, "wb") as fp:
            fp.write(content)
            print(f"{img_dic[0]}下载完成!!!")


if __name__ == '__main__':
    asyncio.run(get_ulr())
    # 运行完会报错Event loop is closed,这个不用管

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值