嗯,最近由于需要写一个爬虫小程序,所以学了一点爬虫。

可是只是按照教程学好没劲啊,于是就想着能不能做点小项目,爬取个美女图片呢。

对于新手来说,还是找一个html网站比较好

我们在这个例程使用的网站根目录是   www.tu11.com

本例程使用的python是3.6版本的

#coidng:utf-8
import requests
from PIL import Image
from bs4 import BeautifulSoup
import os
import time

PS:内容来源于网络,如有侵权请联系我删除

先给大家看一下我爬取的结果

这真的是一个对新手非常友好的网站,先给大家看一下他页面的url

http://www.tu11.com/BEAUTYLEGtuimo/2018/14221.html

可以很明显的看到,最后的那个有图片的页面全部都是放在2018文件夹里面的

我们使用F12工具,可以很容易找到图片url存放的标签

我们可以看到,图片的src存放在 div-》p-》a-》img的src属性里。

这个页面非常简单,其实align属性为“center”的p只有一个,也就是说我们用这个属性定为p就能找到我们想要的img标签。

我用的是beautifulsoup的find方法,比如

soup.find("p", {"align":"center"})   就是找到那个为p的标签

p标签的子标签就是a标签,a标签的子标签就是img标签,img["src"]就是我们要的图片url

然后通过这个url来下载图片

"""
保存图片函数
@param url 图片的路径
@param filename 图片保存的名字
@param root_path 保存图片的根目录
"""
def get_image(url, filename, root_path):img = requests.get(url)if(filename[-4:] == "html"):filename = filename.replace("html", "jpg")img_path = os.path.join(root_path, filename)with open(img_path, "wb+") as f:for chunk in img.iter_content(1024):f.write(chunk)print(filename + "保存成功\n")

for chunk in img.iter_content(1024) 可以边下载边保存,一次下载指定的字节数

当我们下载好了这个图片的时候就要到下一页去进行下载,

使用F12找到下一页的标签

然后用同样的方式提取出a标签的href属性

我们再来看一下url

http://www.tu11.com/BEAUTYLEGtuimo/2018/14221.html

于是很快我们就发现,href属性就是下一页的文件名,我们需要把url最后的部分替换成href的内容

替换函数为

url.replace(filename_old, filename_new)

这样就能一直访问下去知道最后一页。

到了最后一页的时候,我们需要通过推荐找到别的套图url地址

同样的方法找到标签

网页前端代码写的很清晰,注释很全,所以标签应该不难找

"""
当没有下一页的时候,就在推荐里面找第一个作为下一次的url
@param r response对象
"""
def get_next(r):soup = BeautifulSoup(r.text, "html.parser")div = soup.find("div", {"class":"spb"})href = div.find("a")["href"]print(href)url = ""url = base_url + hrefprint(url)return url

全部的代码如下:

#coidng:utf-8
import requests
from PIL import Image
from bs4 import BeautifulSoup
import os
import time"""
保存图片函数
@param url 图片的路径
@param filename 图片保存的名字
@param root_path 保存图片的根目录
"""
def get_image(url, filename, root_path):img = requests.get(url)if(filename[-4:] == "html"):filename = filename.replace("html", "jpg")img_path = os.path.join(root_path, filename)with open(img_path, "wb+") as f:for chunk in img.iter_content(1024):f.write(chunk)print(filename + "保存成功\n")#网站的根目录
base_url = "http://www.tu11.com""""
当没有下一页的时候,就在推荐里面找第一个作为下一次的url
@param r response对象
"""
def get_next(r):soup = BeautifulSoup(r.text, "html.parser")div = soup.find("div", {"class":"spb"})href = div.find("a")["href"]print(href)url = ""url = base_url + hrefprint(url)return url#文件夹根目录
path = "亿秀网"
"""
逐页读取图片的url地址
@param initial_url  初始url
@param make_dirs 是否建立新文件夹 False为否
@param folder 存放图片的文件夹
"""
def spider(initial_url, make_dirs = False, folder = None):r = requests.get(initial_url)r.encoding = "gbk"soup = BeautifulSoup(r.text, "html.parser")title = "/" + soup.title.stringp = soup.find("p", {"align":"center"})a_s = p.find_all("a")folder_dir = path + titleprint("文件夹路径:" + folder_dir)if (not os.path.exists(folder_dir) and make_dirs==True):    #如果没有这个文件夹就建一个os.makedirs(folder_dir)print("成功建立文件夹")for a in a_s:href = a["href"]print(href)#读取图片的地址并且保存img_src = a.img["src"]filename = initial_url.split("/")[-1]print(filename)if(folder == None):     #如果文件夹名为None就用刚刚建的文件夹get_image(img_src, filename, folder_dir)else:                   #否则就用传入的文件夹get_image(img_src, filename, folder)if(href[-4:] == "html" and len(href) < 16):    #如果下一页还有的话print("该页面还有下一页,进行迭代操作")initial_url = initial_url.replace(filename, href)print("下一个url:", initial_url + "\n")time.sleep(1)if(folder == None):  #如果没有传入文件夹就用新建立的文件夹return initial_url, folder_direlse:                #否则就用传入的文件夹return initial_url, folderelif(len(href) >= 16 or href[:4]=="java"):                #如果没有下一页了就开始寻找新的urlprint("到这里了\n")new_url = get_next(r)return new_url, Nonetime.sleep(1)                 #休眠一秒"""
开始函数
@param start_url 开始函数
"""
def start(start_url):initial_url = start_urlnext_url, folder = spider(initial_url, make_dirs=True, folder=None)while(next_url != None):if(folder == None):         #新的一组图片,要新建文件夹next_url, folder = spider(next_url,make_dirs=True, folder=folder)elif(folder != None):next_url, folder = spider(next_url,make_dirs=False, folder=folder)print("floder=",folder)if __name__ == "__main__":#判断根目录有没有 亿秀网 文件夹exist = os.path.exists("亿秀网")if not exist:os.makesdirs("亿秀网")url = "http://www.tu11.com/BEAUTYLEGtuimo/2018/14123.html"start(url)

对了,别忘了每下载一张图片都sleep(1)秒,稍微伪装一下。

主函数里的url就是开始url,你可以替换成任意的一个起始url,不过还是推荐用BEAUTYLEG的图片,因为其他的url推荐栏的内容都是一样的,这样就不能一次爬取很多图片了。

不过用BEAUTYLEG也有可能有重复,可以写一个函数来判断是不是重复。

使用python爬虫批量下载美女图片相关推荐

  1. Python 爬虫批量下载美女图片,给枯燥的工作添加点乐趣!

    背景: 最近部门领导交给笔者一个爬取百度关键词排名的任务.写好了基本功能,能不能正常使用呢?于是乎,有了本文,爬取一些美女图片,一来可以检验下爬虫效果:二来呢,也可以养养眼,给工作增加点乐趣不是,哈哈 ...

  2. Python 爬虫 批量下载论坛图片

    原创文章,欢迎转载.转载请注明出处:http://blog.csdn.net/jmppok/article/details/16847697 前几天心血来潮,写了个Python程序,用来下载论坛上的图 ...

  3. python爬虫批量下载“简谱”

    python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...

  4. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...

  5. 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...

  6. 新一配:perl循环调用python爬虫批量下载喜马拉雅音频

    新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...

  7. python爬虫批量下载图片

    使用python的urllib库和正则表达式爬取 学习地址(自行base64解密):aHR0cDovL3BpYy5uZXRiaWFuLmNvbQ== 网站图片,支持批量下载. (本文仅供学习交流,请勿 ...

  8. Python实用案例,Python脚本,Python实现批量下载百度图片

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  9. python 爬虫批量下载图片

    今天加班啊,苦啊!! 无聊,用python写了一个抓图片的爬虫,感觉很不错啊,哈哈 先贴上代码:(python 版本:2.7.9) __author__ = 'bloodchilde'import u ...

  10. python爬虫 批量下载高清大图

    文章目录 前言 下载免费高清大图 下载带水印的精选图 代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小 ...

最新文章

  1. [转]Linux配置防火墙
  2. 4_Shell语言———脚本概述
  3. C#封装类似任务管理器CPU使用记录图
  4. BaaS后端即服务 - 分析篇
  5. 生成随机长度字符串,比如密码等
  6. 记录一个奇葩问题 宝塔 nginx: [warn] conflicting server
  7. Spring学习总结(23)——Spring Framework 5.0 新特性
  8. 谁抢光了你的火车票?
  9. HTML5UI横向排列,5个实用的UI排版技巧,让你的作品更细致
  10. Python--pyaudio声卡录音
  11. python dask_使用Python并行框架Dask处理和分析大规模时空数据
  12. c++ cout 不能正常打印uint8_t
  13. 快商通董事长肖龙源:逐浪AI大潮,职业教育应紧握机遇,赋能产业
  14. iQOO正式面世,vivo怎么玩转独立子品牌?
  15. 58同城|TEG技术工程平台群-闪电面试专场内推(12月7日)
  16. 分压器有哪些最新发表的毕业论文呢?
  17. Fusion 360的快捷键大全
  18. 《信息安全保障》一第3章 信息安全管理基础
  19. mysql zfs快照_Solaris ZFS 快照和克隆使用指南
  20. animations 动画图片的播放

热门文章

  1. 以锅炉安全为例,台账管理在安全建设中的作用
  2. c#高级编程(第八版)-第六章数组随笔
  3. php+检测是否是手机浏览器,通过PHP、JavaScript、判断是否为手机浏览器
  4. 计算机主机ppt课件,怎么用电脑制作ppt课件
  5. python文件去重_python实现文件内容去重
  6. logisim实验三:原码一位乘法器设计实验
  7. 老闪创业那些事儿(88)——上市的钟声响起
  8. Multisim10.0.1汉化时没有stringfiles问题
  9. AutoCAD将DWG图纸转为PNG图片
  10. 电容屏、电阻屏基础知识