热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在win10利用Python3.6编写批量下载图片的小程序

importurllib.requestimportos#用于获取煎蛋网页面的函数defurl_open(url):requrllib.request.Request(url)
import urllib.request
import os

#用于获取煎蛋网页面的函数
def url_open(url):
req = urllib.request.Request(url)
#添加header信息
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')
respOnse= urllib.request.urlopen(req)
html = response.read()
return html

#用于从煎蛋网的网页中获取页面的地址的函数
def get_page(url):
#将网页解码为Python能够处理的Unicode编码
html = url_open(url).decode('utf-8')
a = html.find('current-comment-page')+23
b = html.find(']', a)
print('总共有%s页图片'%html[a:b])
return html[a:b]

#用于从煎蛋网的页面中找到图片地址的函数
def find_imgs(url):
html = url_open(url).decode('utf-8')
img_addrs = []
#find函数若找不到要找到的字符串则会返回-1
a = html.find('img src=')
while a != -1:
#给定.jpg的寻找范围,注意不要的太大
b = html.find('.jpg', a, a+100)
#如果顺利找到.jpg,说明找到了完整的图片的地址,则进行保存
if b != -1:
#对图片进行保存时要格外注意,因为现在使用了泛解析,有的地址不会
#明确给出http的协议名,有的地址有会给出http,
#这对于我们的抓取带来了一定的麻烦,因此我们要分两种情况进行讨论
#这样才不会出现地址错误的异常
if 'http' not in html[a+9:b+4]:
img_addrs.append('http:'+html[a+9:b+4])
else:
img_addrs.append(html[a+9:b+4])
else:
#如果找不到.jpg,则应将b+9,因为下一次循环是从这一次结束开始的
#如果不进行这个操作,则b=-1,则无法进行下一次寻找,之所以加9
#是因为img src="正好是9个字节
b=a+9
#继续进行下一次寻找,只有一个参数,表示从这个点开始下一次寻找
a = html.find('img src=', b)
return img_addrs
#用于保存图片的函数
def save_imgs(folder, img_addrs):
for each in img_addrs:
#[-1]表示从右边数第一个参数
filename = each.split('/')[-1]
f = open(filename, 'wb')
img = url_open(each)
f.write(img)
def download_mm(folder = '煎蛋妹子图', pages = 0):
#在当前的文件夹(python.exe所在的文件)下创建新的文件夹
os.mkdir(folder)
#将目录切换到该文件夹
os.chdir(folder)

url = 'http://jandan.net/ooxx/'
#这里的地址是一层套着一层
#页面的地址在网页中抓取
#而页面中的图片在在页面的地址下抓取
#注意层层递进的关系
page_num = int(get_page(url))
a = int(input('总用抓取多少页图片:'))
pages = a
for i in range(pages):
#使用循环获取10页的内容
page_num -= 1
#获取每一页的地址
page_url = url + 'page-' + str(page_num) + '#comments'
#在每一页中找到图片
img_addrs = find_imgs(page_url)
#保存图片
save_imgs(folder, img_addrs)
if __name__ == '__main__':
download_mm()

效果如下图所示,有多少页图片就可以抓多少,抓取的图片保存在程序的同级目录下的文件夹《煎蛋妹子图》


推荐阅读
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • 【Python爬虫实操】 不创作小说,专精网站内容迁移,超高效!(含源代码)
    本文详细介绍了如何利用Python爬虫技术实现高效网站内容迁移,涵盖前端、后端及Android相关知识点。通过具体实例和源代码,展示了如何精准抓取并迁移网站内容,适合对Python爬虫实战感兴趣的开发者参考。 ... [详细]
  • 在前一篇文章中,我们介绍了如何使用Requests库发送GET请求。本文将深入探讨如何通过Requests库发送POST请求,包括参数格式、请求封装等关键技巧,并通过“历史上的今天”API实例进行详细说明。 ... [详细]
  • (1)搜狗搜索人物实战 importrequestsurlhttps:www.sogou.comweb?query李荣浩 #首先我们需要观察在搜狗输入李 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 在今天的实践中,我深入学习了网页图像抓取技术,通过编写爬虫程序批量获取网站上的图片资源。具体来说,我选择了一个包含大量高质量图片的网站作为练习对象,并成功实现了将这些图片批量下载到本地存储。这一过程不仅提升了我对爬虫技术的理解,还增强了我的编程能力。 ... [详细]
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • 代码:headersAccept:texthtml,applicationxhtml+xml,applicationxml;q0.9,imagewebp,image ... [详细]
  • Python3怎么获取文件属性
    这篇文章给大家分享的是有关Python3怎么获取文件属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。os.stat(path ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 本文详细解析了 Python 2.x 版本中 `urllib` 模块的核心功能与应用实例,重点介绍了 `urlopen()` 和 `urlretrieve()` 方法的使用技巧。其中,`urlopen()` 方法用于发送网络请求并获取响应内容,而 `urlretrieve()` 方法则用于下载文件并保存到本地。文章通过具体示例展示了这两个方法在实际开发中的应用场景,帮助读者更好地理解和掌握 `urllib` 模块的使用。 ... [详细]
  • Python3+Appium安装使用教程
    一、安装我们知道selenium是桌面浏览器自动化操作工具(WebBrowserAutomation)appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mo ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有