使用python爬虫批量下载美女图片

发布时间:2025-12-09 22:04:19 浏览次数:4

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

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

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

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

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

#coidng:utf-8import requestsfrom PIL import Imagefrom bs4 import BeautifulSoupimport osimport time

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

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

 

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

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

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

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

我们可以看到,图片的src存放在 p-》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")p = soup.find("p", {"class":"spb"})href = p.find("a")["href"]print(href)url = ""url = base_url + hrefprint(url)return url

全部的代码如下:

#coidng:utf-8import requestsfrom PIL import Imagefrom bs4 import BeautifulSoupimport osimport 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")p = soup.find("p", {"class":"spb"})href = p.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也有可能有重复,可以写一个函数来判断是不是重复。

 

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477