Python多线程爬虫:下载妹子图
129 浏览量
更新于2024-08-29
收藏 60KB PDF 举报
"Python实现多线程下载图片脚本"
在Python编程中,多线程是一种常见的并发执行方式,尤其适用于需要处理大量I/O密集型任务的场景,如网络请求和文件读写。本示例代码是用于多线程抓取网络上的妹子图,采用Python的`multiprocessing.dummy`模块中的`Pool`类实现。这个模块实际上是`threading`模块的封装,提供了一个类似进程池的工作机制,使得多线程操作更为便捷。
首先,代码导入了以下库:
1. `urllib2`:用于发送HTTP请求和处理响应,包括打开URL并读取内容。
2. `sys`:获取文件系统编码,确保文件名的正确处理。
3. `time`:用于时间相关的操作,如获取当前时间。
4. `os`:操作系统相关的功能,如创建、删除文件等。
5. `random`:生成随机数,用于生成随机文件名。
6. `multiprocessing.dummy.Pool`:创建线程池,用于多线程操作。
代码中定义了几个关键函数:
1. `rename()`:生成一个时间戳格式的字符串,用于为下载的图片生成唯一的文件名。
2. `rename_2(name)`:根据输入的名字长度添加前导零,确保文件名的统一格式。
3. `download_pic(i)`:这是主要的下载函数,它接收一个图片URL,尝试下载图片。如果请求超时(由全局变量`time_out`控制),则打印错误信息并跳过。下载成功后,图片会被保存到本地,并更新全局计数器`count`。
4. `Filter(content)`:过滤函数,检查给定的字符串是否包含某些特定的字符或短语,如果包含则返回False,否则返回True。这个函数在脚本中可能用于过滤不合适的图片链接。
5. `get_pic(url_address)`:获取指定URL页面的HTML内容,然后从中解析出图片链接,将这些链接添加到全局列表`pic_list`中。
在主程序中,首先设置了一些全局变量,如超时时间`time_out`,然后调用`get_pic()`函数获取网页中的图片链接。接着,创建一个线程池,通过`Pool().map()`方法并行地执行`download_pic()`函数,对每一个图片链接进行下载。
需要注意的是,`multiprocessing.dummy.Pool`的线程数量默认与CPU核心数相同,如果需要自定义线程数量,可以传递一个整数参数给`Pool()`构造函数。同时,多线程并不意味着性能一定提升,过多的线程可能会增加上下文切换的开销,反而降低效率。
这段代码提供了一个基本的多线程图片下载器模板,可以通过修改`Filter_list`和`get_pic()`函数来适应不同的网页结构和图片过滤规则。不过,实际使用时应考虑添加异常处理、更高效的图片链接解析、下载进度显示等功能,以提高脚本的健壮性和用户体验。
2020-08-30 上传
2024-01-01 上传
点击了解资源详情
2023-12-29 上传
2021-08-09 上传
2023-08-22 上传
2019-05-11 上传
2019-12-04 上传
2024-11-24 上传
weixin_38717896
- 粉丝: 4
- 资源: 885
最新资源
- 俄罗斯RTSD数据集实现交通标志实时检测
- 易语言开发的文件批量改名工具使用Ex_Dui美化界面
- 爱心援助动态网页教程:前端开发实战指南
- 复旦微电子数字电路课件4章同步时序电路详解
- Dylan Manley的编程投资组合登录页面设计介绍
- Python实现H3K4me3与H3K27ac表观遗传标记域长度分析
- 易语言开源播放器项目:简易界面与强大的音频支持
- 介绍rxtx2.2全系统环境下的Java版本使用
- ZStack-CC2530 半开源协议栈使用与安装指南
- 易语言实现的八斗平台与淘宝评论采集软件开发
- Christiano响应式网站项目设计与技术特点
- QT图形框架中QGraphicRectItem的插入与缩放技术
- 组合逻辑电路深入解析与习题教程
- Vue+ECharts实现中国地图3D展示与交互功能
- MiSTer_MAME_SCRIPTS:自动下载MAME与HBMAME脚本指南
- 前端技术精髓:构建响应式盆栽展示网站