音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

只用50行Python代码爬取网络美女高清图片
日期:2021-09-08 14:34:54   来源:脚本之家

一、技术路线

requests:网页请求
BeautifulSoup:解析html网页
re:正则表达式,提取html网页信息
os:保存文件

import re
import requests
import os
from bs4 import BeautifulSoup

二、获取网页信息

常规操作,获取网页信息的固定格式,返回的字符串格式的网页内容,其中headers参数可模拟人为的操作,‘欺骗'网站不被发现

def getHtml(url):  #固定格式,获取html内容
    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('网络状态错误')

三、网页爬取分析

右键单击图片区域,选择 ‘审查元素' ,可以查看当前网页图片详情链接,我就满心欢喜的复制链接打开保存,看看效果,结果一张图片只有60几kb,这就是缩略图啊,不清晰,果断舍弃。。。

在这里插入图片描述
在这里插入图片描述

没有办法,只有点击找到详情页链接,再进行单独爬取。

空白右键,‘查看页面源代码',把刚刚复制的缩略图链接复制查找快速定位,分析所有图片详情页链接存在div标签,并且class=‘list' 唯一,因此可以使用BeautifulSoup提取此标签。并且发现图片详情页链接在herf=后面(同时我们注意到有部分无效链接也在div标签中,观察它们异同,发现无效链接存在'https'字样,因此可在代码中依据此排出无效链接,对应第4条中的函数代码),只需提取出来再在前面加上网页首页链接即可打开,并且右键图片,‘审查元素',复制链接下载的图片接近1M,表示是高清图片了,到这一步我们只需调用下载保存函数即可保存图片

在这里插入图片描述

在这里插入图片描述

四、网页详情页链接获取

根据第3条分析的情况,首要目标是将每页的每个图片的详情页链接给爬取下来,为后续的高清图片爬取做准备,这里直接定义函数def getUrlList(url):

def getUrlList(url):  # 获取图片链接
    url_list = []  #存储每张图片的url,用于后续内容爬取
    demo = getHtml(url)
    soup = BeautifulSoup(demo,'html.parser')
    sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作为锚,获取唯一的div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_
    nls = re.findall(r'a href="(.*?)" rel="external nofollow"  rel="external nofollow" ', str(sp)) #用正则表达式提取链接
    for i in nls:
        if 'https' in i: #因所有无效链接中均含有'https'字符串,因此直接剔除无效链接(对应第3条的分析)
            continue
        url_list.append('http://www.netbian.com' + i) #在获取的链接中添加前缀,形成完整的有效链接
    return url_list

五、依据图片链接保存图片

同理,在第4条中获取了每个图片的详情页链接后,打开,右键图片'审查元素',复制链接即可快速定位,然后保存图片

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')
        psoup = soup.find('div', class_="pic") #class_="pic"作为锚,获取唯一div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_
        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, '下载完毕!!!')

六、main()函数

经过前面的主体框架搭建完毕之后,对整个程序做一个前置化,直接上代码

在这里第1页的链接是http://www.netbian.com/meinv/

第2页的链接是http://www.netbian.com/meinv/index_2.htm

并且后续页面是在第2页的基础上仅改变最后的数字,因此在写代码的时候要注意区分第1页和后续页面的链接,分别做处理;同时在main()函数还增加了自定义爬取页数的功能,详见代码

在这里插入图片描述

def main():
    n = input('请输入要爬取的页数:')
    url = 'http://www.netbian.com/meinv/'  # 资源的首页,可根据自己的需求查看不同分类,自定义改变目录,爬取相应资源
    if not os.path.exists('./美女'):  # 如果不存在,创建文件目录
        os.mkdir('./美女/')
    page = 1
    fillPic(url, page)  # 爬取第一页,因为第1页和后续页的链接的区别,单独处理第一页的爬取
    if int(n) >= 2: #爬取第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' #获取第2页后的每页的详情链接
            fillPic(url, page) #调用fillPic()函数

七、完整代码

最后再调用main(),输入需要爬取的页数,即可开始爬取,完整代码如下

import re
import requests
import os
from bs4 import BeautifulSoup

def getHtml(url):  #固定格式,获取html内容
    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_list = []  #存储每张图片的url,用于后续内容爬取
    demo = getHtml(url)
    soup = BeautifulSoup(demo,'html.parser')
    sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作为锚,获取唯一的div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_
    nls = re.findall(r'a href="(.*?)" rel="external nofollow"  rel="external nofollow" ', str(sp)) #用正则表达式提取链接
    for i in nls:
        if 'https' in i: #因所有无效链接中均含有'https'字符串,因此直接剔除无效链接(对应第3条的分析)
            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')
        psoup = soup.find('div', class_="pic") #class_="pic"作为锚,获取唯一div标签;注意,这里的网页源代码是class,但是python为了和class(类)做区分,在最后面添加了_
        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)  # 爬取第一页,因为第1页和后续页的链接的区别,单独处理第一页的爬取
    if int(n) >= 2: #爬取第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' #获取第2页后的每页的详情链接
            fillPic(url_page, page) #调用fillPic()函数

main()

到此这篇关于只用50行Python代码爬取网络美女高清图片的文章就介绍到这了,更多相关Python爬取图片内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程