美图收割机,老司机带你用Python,轻松获取1000张美女图片

牛老师是一个滴水之恩当涌泉相报的人。

看着群里小伙伴们的无私分享,再看看自己空空如也的文件夹,我羞愧的低下了头 。
请添加图片描述
为了能回报小伙伴,和广大无私的网友

牛老师毅然决然的做出了这个造福人民的决定

靠着这个程序,如今已经成为了群里众人膜拜的大佬

接下来牛老师将法宝传授给你们,让你们也能拥有属于自己的“学习资料”
请添加图片描述

开发环境

  • 系统:Windows10 64位

  • Python版本:3.9

  • Pycharm版本:2021.1.3

  • 模块(库):re、requests、os、BeautifulSoup

一、获取网页信息

强壮的牛老师,选择了一个柔弱没有防备的网站来偷袭
请添加图片描述
为了伪装成一个无害的文弱青年,方便之后的进一步操作

祭出祖传操作,先声明一个请求头,下面的headers参数用于伪装

然后悄咪咪的偷袭,先判断能不能下手,确定能下手后先获取了第一手信息

url = 'http://www.netbian.com/meinv/'
#先声明请求头
headers = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
 }
#判断网络连接状态
try:
    r = requests.get(url, headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text)
except:
    print('网络状态错误')

二、分析网页

想到马上就能得到图片的牛老师满心欢喜,激动的打开了图片

结果发现画质不太给力,原本1920x1080的高清大图变成了800x450
请添加图片描述
请添加图片描述
直接通过主页面所下载的图片是缩略图

于是牛老师通过进入到详情页,又下载了一次。果然,这次得到了又大又圆的高清图片
请添加图片描述
按下F12,查看div标签中图片的详细参数,可以看到这里有高清大图的链接

所以,我们只需要通过BeautifulSoup提取出来,下载它就很简单了
请添加图片描述

三、获取图片链接

既然找到了高清图片的链接,那么就通过BeautifulSoup,把这些链接都截取下来

首先牛老师先把,获取网页信息的代码封装成函数,以方便调用

def getHtml(url):
    #先声明请求头
    headers = {
         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    }
    #判断网络连接状态
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print('网络状态错误')

因为要的是有用的数据,这一步首先把整体的链接都提取出来了

电脑很蠢,不能直接拿到我们想要的数据,所以这里通过"list"作为锚点,把有用的地方筛选出来

把没有用的链接先剔出去

有用的链接因为都只有后缀,所以下面给它凑个网址出来,这样一个完整的链接就出来了
请添加图片描述

url = 'http://www.netbian.com/meinv/'
#先储存每张图的url
url_list = []
demo = getHtml(url)
soup = BeautifulSoup(demo,'html.parser')
#class='list'作为锚,方便获取我要的数据;为了和类做区分,这里class下方加了"_"
sp = soup.find_all('div', class_="list")
#提取链接
nls = re.findall(r'a href="(.*?)"', str(sp))
for i in nls:
    #剔除掉无效链接
    if 'https' in i:
        continue
    #获取链接后添加网址前缀
    url_list.append('http://www.netbian.com' + i)
print (url_list)

这样url_list列表就被塞满了,把结果打出来给牛老师康康请添加图片描述

四、保存图片

牛老师空荡荡的文件夹,这次总算是可以喂饱了

图片也看了,链接也爬出来了,那接下来又怎么办呢?

那当然是保存咯

首先,还要再按按F12进入调试台,找到高清大图的下载链接
请添加图片描述
以pic的位置作为锚点,获取我们需要的数据

找到准确的图片地址后,然后开始下载

这里也要将获取图片链接的程序封装一下

def getUrlList(url):
    #先储存每张图的url
    url_list = []
    demo = getHtml(url)
    soup = BeautifulSoup(demo,'html.parser')
    #class='list'作为锚,方便获取我要的信息;为了和类做区分,这里class下方加了"_"
    sp = soup.find_all('div', class_="list")
    #提取链接
    nls = re.findall(r'a href="(.*?)"', str(sp))
    for i in nls:
        #剔除掉无效链接
        if 'https' in i:
            continue
        #获取链接后添加网址前缀
        url_list.append('http://www.netbian.com' + i)
    return url_list

封装好了之后,就可以开始以下代码编辑

url = 'http://www.netbian.com/meinv/'
#第一页
page = 1
pic_url = getUrlList(url)
#保存的路径
path = './学习资料'
for p in range(len(pic_url)):
    pic = getHtml(pic_url[p])
    soup = BeautifulSoup(pic, 'html.parser')
    #这里以pic为锚,方便找到需要的信息;
    psoup = soup.find('div', class_="pic")
    #获取高清图片下载链接,返回的是列表形式,所以咱们一个一个拿
    picUrl = re.findall(r'src="(.*?)"', str(psoup))[0]
    #打开链接,以二进制形式返回
    pic = requests.get(picUrl).content
    #给图片文件起名
    image_name ='学习资料' + '第{}页'.format(page) + str(p+1) + '.jpg'
    #设置图片保存位置
    image_path = path + '/' + image_name
    #保存图片
    with open(image_path, 'wb') as f:
        f.write(pic)
        print(image_name, '拿来吧你!!!')

看着空空的文件夹,渐渐出现了学习资料

牛老师兴奋不已,但人的欲望是不会轻易满足的

只能爬取一页?那不行,于是下面开始自己设定爬取的页数

把你的学习资料塞得满满当当

五、完整程序

前面的学习资料对于老司机来说,依然只是洒洒水

于是牛老师教你怎么爬取更多更多好康的图片

首先,依旧是检查下网页,先搞清楚如何翻页的
请添加图片描述
请添加图片描述
第一二页的区别仅仅只是变换了下数字,同理第三页后缀3

所以就只需要做一个小小的加法,依次递增翻页就完成了

现在导入程序,之前的图片保存代码封装一下

这里封装的函数叫fillpic(),等下把所有源码放在下方

n = input('爬取页数:')
#美女图片首页,可以更换
url = 'http://www.netbian.com/meinv/'
#如果没有学习资料,自动创建一个文件夹
if not os.path.exists('./学习资料'):
    os.mkdir('./学习资料/')
page = 1
#先爬取第一页,第一页没有后缀数字,所以单独拿出来
fillPic(url, page)
#遍历爬取之后的页数
if int(n) >= 2:
    ls = list(range(2, 1 + int(n)))
    url = 'http://www.netbian.com/meinv/'
    for i in ls:
        page = str(i)
        url_page = 'http://www.netbian.com/meinv/'
        #获取高清大图的链接
        url_page += 'index_' + page + '.htm'
        #保存图片
        fillPic(url, page)

先自己设定页数,想爬多少爬多少

存满你的学习文件夹

下面牛老师把所有的代码都理一遍

六、源码

import requests
import re
import os
from bs4 import BeautifulSoup

#获取网页信息
def getHtml(url):
    #先声明请求头
    headers = {
         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    }
    #判断网络连接状态
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print('网络状态错误')

#获取图片链接
def getUrlList(url):
    #先储存每张图的url
    url_list = []
    demo = getHtml(url)
    soup = BeautifulSoup(demo,'html.parser')
    #class='list'作为锚,方便获取我要的信息;为了和类做区分,这里class下方加了"_"
    sp = soup.find_all('div', class_="list")
    #提取链接
    nls = re.findall(r'a href="(.*?)"', str(sp))
    for i in nls:
        #剔除掉无效链接
        if 'https' in i:
            continue
        #获取链接后添加网址前缀
        url_list.append('http://www.netbian.com' + i)
    return url_list

#保存图片
def fillPic(url,page):
    pic_url = getUrlList(url)
    #保存的路径
    path = './学习资料'
    for p in range(len(pic_url)):
        pic = getHtml(pic_url[p])
        soup = BeautifulSoup(pic, 'html.parser')
        #这里以pic为锚,方便找到需要的信息;
        psoup = soup.find('div', class_="pic")
        #获取高清图片下载链接,返回的是列表形式,所以咱们一个一个拿
        picUrl = re.findall(r'src="(.*?)"', str(psoup))[0]
        #打开链接,以二进制形式返回
        pic = requests.get(picUrl).content
        #给图片文件起名
        image_name ='学习资料' + '第{}页'.format(page) + str(p+1) + '.jpg'
        #设置图片保存位置
        image_path = path + '/' + image_name
        #保存图片
        with open(image_path, 'wb') as f:
            f.write(pic)
            print(image_name, '拿来吧你!!!')

def main():
    n = input('爬取页数:')
    #美女图片首页,可以更换
    url = 'http://www.netbian.com/meinv/'
    #如果没有学习资料,自动创建一个文件夹
    if not os.path.exists('./学习资料'):
        os.mkdir('./学习资料/')
    page = 1
    #先爬取第一页,第一页没有后缀数字,所以单独拿出来
    fillPic(url, page)
    #遍历爬取之后的页数
    if int(n) >= 2:
        ls = list(range(2, 1 + int(n)))
        url = 'http://www.netbian.com/meinv/'
        for i in ls:
            page = str(i)
            url_page = 'http://www.netbian.com/meinv/'
            #获取高清大图的链接
            url_page += 'index_' + page + '.htm'
            #保存图片
            fillPic(url, page)

main()

有了这段代码,只要你按照以上思路,稍作修改(bie fenghao)

还愁自己拼不过群友吗?

本篇文章就到这了

想要了解更多关于爬虫,关于python知识

可以动动小手给牛老师点个关注,以后会持续更新

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值