公告
  
重要通知:网站网络变更中可能出现站点图片无法加载的问题,点击此处可解决!
更多资讯可访问:点击查看消息详情!

朕已阅

让Ai帮我打工之python爬痒痒鼠官方壁纸

admin 千秋月 关注 管理组 论坛神话
发表于程序代码版块 技术杂文

闲来无事又想着玩玩Ai,然后想学习下爬虫。

记录一下跟ai沟通的写的一个简单爬虫。


向Ai提需求(变身甲方baba 哈哈)

提取需求之前,我们自己要有想法,该怎么下载这些图片,正常是不是鼠标选择图片点击右键下载。那这样不得累死。既然是自动化,那我们右键复制图片链接,打开无痕浏览,打开。

ok图片显示出来了,证明图片链接是可以直接下载的。这不思路就来了嘛。


①先获取到所有的图片链接。

②写代码批量自动下载保存。

PS:就这么简单的思路,哈哈。


那么怎么获取到所有的图片链接呢?打开要爬的网址,F12定位,详细的XPath信息不就来了,右键复制XPath。

查看网址信息,请求头,User-Agent、Cookie等信息。保存。

Image

然后把得到的信息整合一下,编辑需求提交给乙方(chatGPT)。

Image

Image

不得不说AI效率就是高,分分钟出代码。但是我测试一下没用,运行不报错,也无法获取 ,经过我几轮的返回日志,发现XPath表达式写错了。改完之后就运行成功。


ai是这样的,每次都是一堆bug,必须得有一点基础,不然都知道为什么没用。emotion


最终得到如下代码:

import requests
from lxml import etree
from tqdm import tqdm

def main():
    headers = {
        'authority': 'yys.163.com',
        'Cookie': 'topbarnewsshow=1; P_INFO=capooai@163.com|1715437857|0|xyq|00&99|null&null&null#jix&360100#10#0|&0||capooai@163.com; Qs_lvt_382223=1715826885; Qs_pv_382223=3122144086163182600; _ga=GA1.1.76648450.1715826886; _ga_C6TGHFPQ1H=GS1.1.1715826885.1.0.1715827356.0.0.0; _nietop_foot=%u9634%u9633%u5E08%7Cyys.163.com; topbarnewsshow=1; timing_user_id=time_QFzBHpwgxy',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
    }
   
    response = requests.get("https://yys.163.com/media/picture.html", headers=headers)
   
    if response.status_code == 200:
        html_content = response.text
        html_tree = etree.HTML(html_content)
        
        href_values = html_tree.xpath("/html/body/div[2]/div[3]/div[1]/div[3]/div[2]/div/div[*]/div/div/a/@href")
        
        save_path = "H:/Pictures/demo001.txt"
        
        with open(save_path, 'w', encoding='utf-8') as f:
            for href in tqdm(href_values, desc="Saving progress"):
                f.write(href + '\n')
        
        print("Save complete!")
    else:
        print("Failed to retrieve webpage.")

if __name__ == "__main__":
    main()
import os
import requests
from tqdm import tqdm
import threading

def extract_size_info(url):
    # 提取文件名部分
    filename = url.split('/')[-1]
    # 提取图片大小信息
    size_info = filename.split('.')[0]
    return size_info

def download_image(url, folder_path, filename):
    # 获取已下载文件数量
    files_in_folder = os.listdir(folder_path)
    num_files = len(files_in_folder)
    # 拼接保存路径,并添加编号
    save_path = os.path.join(folder_path, f"{num_files+1:05d}_{filename}")
    # 下载图片并保存
    response = requests.get(url, stream=True)
    total_size = int(response.headers.get('content-length', 0))
    block_size = 1024
    progress_bar = tqdm(total=total_size, unit='B', unit_scale=True, desc=filename, leave=False)
    with open(save_path, 'wb') as f:
        for data in response.iter_content(block_size):
            progress_bar.update(len(data))
            f.write(data)
    progress_bar.close()

def download_images(image_urls, base_path, num_threads):
    # 创建总进度条
    total_progress_bar = tqdm(total=len(image_urls), desc="下载进度")
   
    # 创建下载线程列表
    threads = []
   
    # 遍历图片链接列表
    for url in image_urls:
        # 提取图片大小信息
        size_info = extract_size_info(url)
        # 创建文件夹路径
        folder_path = os.path.join(base_path, size_info)
        # 如果文件夹不存在,则创建
        if not os.path.exists(folder_path):
            os.makedirs(folder_path)
        # 提取文件名
        filename = url.split('/')[-1]
        # 创建下载线程并启动
        thread = threading.Thread(target=download_image, args=(url, folder_path, filename))
        thread.start()
        threads.append(thread)
        # 更新总进度条
        total_progress_bar.update(1)
        
        # 控制线程数量在5到10之间
        if len(threads) >= num_threads:
            for t in threads:
                t.join()
            threads = []

    # 等待剩余线程结束
    for t in threads:
        t.join()
   
    # 关闭总进度条
    total_progress_bar.close()

    print("下载完成!")

def main():
    # 读取图片链接列表
    image_urls = []
    with open("H:/Pictures/demo001.txt", "r", encoding="utf-8") as file:
        image_urls = file.readlines()
    # 去除换行符
    image_urls = [url.strip() for url in image_urls]
   
    # 基础保存路径
    base_path = "H:/Pictures/yys/side"
   
    # 线程数量限制在5到10之间
    num_threads = min(max(len(image_urls) // 10, 5), 10)
   
    # 调用下载函数
    download_images(image_urls, base_path, num_threads)

if __name__ == "__main__":
    main()


本文章最后由 admin2024-05-30 12:32 编辑
评论列表 评论
发布评论

评论: 让Ai帮我打工之python爬痒痒鼠官方壁纸



点击进入免费吃瓜群!吃大瓜! 广告位支持代码、文字、图片展示 Image


免责声明
本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。 不得用于商业或非法用途,否则,一切责任由该用户承担 !

请求资源或报告无效资源,请点击[反馈中心]


侵权删除请致信 E-Mail:chengfengad@gmail.com
已有0次打赏
(0) 分享
分享
取消