吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6189|回复: 35
上一主题 下一主题
收起左侧

[Python 转载] python爬虫批量下载图片(可直接使用)

  [复制链接]
跳转到指定楼层
楼主
Jarvis007 发表于 2022-7-14 10:13 回帖奖励

使用python的urllib库和正则表达式爬取
网站图片,支持批量下载。
学习地址(自行base64解密):aHR0cDovL3BpYy5uZXRiaWFuLmNvbQ==

(本文仅供学习交流,请勿商用,侵删)

1.可选择图片类型、下载指定几页的内容。
https://img-blog.csdnimg.cn/7a35bf3840e8430ca63cc6a7e04dff75.png
https://img-blog.csdnimg.cn/2019051913241197.png
2.源代码

"""
    功能:批量下载网站图片
    时间:2022-6-18 16:14:01
    作者:倚窗听雨
"""
import urllib.request
import re
import os

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36",
}
tempList = ["pic","netbian","com"]
ur = f"http://{'.'.join(tempList)}"
url_list = []

#获取各类型图片url
def picture(url):
    res = urllib.request.Request(url,data=None,headers=headers)
    html = urllib.request.urlopen(res).read().decode('gbk')

    pic = re.findall(r'<div class="classify clearfix.+</div>',html)
    start = 0
    text = pic[0]
    for i in re.findall(r'<a ',pic[0]):
        a = re.search(r'<a ',text)
        end_a = re.search(r'</a>',text)

        href = url+text[a.start():end_a.end()].split('"')[1]
        title = text[a.start():end_a.end()].split('"')[3]
        d = {'href':href,'title':title}
        url_list.append(d)

        text = text[end_a.end():]

#获取图片链接
def get_pic(url):
    res = urllib.request.Request(url,headers=headers)
    html = urllib.request.urlopen(res).read().decode('gbk')

    page = re.search(r'class="slh".+[\s].+',html).group().split('</a')[0].split('>')[-1]
    print('共',page,'页')
    start_page = int(input('下载起始页:'))
    end_page = int(input('下载到哪页:'))
    total = 0
    for p in range(start_page,end_page+1):
        if p ==1:
            url2 = url + 'index'+'.html'
        else:
            url2 = url + 'index_'+str(p)+'.html'
        print('\n',url2)
        res2 = urllib.request.Request(url2, headers=headers)
        html2 = urllib.request.urlopen(res2).read().decode('gbk')

        texts =re.findall(r'<ul class="clearfix".+[\s]*.+',html2)
        t = texts[0]
        print('准备下载第',p,'页图片......')

        #获取当前页的图片并下载
        for i in re.findall(r'<li>',t):
            start_li = re.search(r'<li>',t)
            end_li = re.search(r'</li>',t)

            href = ur+t[start_li.start():end_li.end()].split('"')[1]
            name = t[start_li.start():end_li.end()].split('b>')[-2][:-2]

            total += download(href,name)
            t = t[end_li.end():]
    print('\n下载完成,共下载{}张图片'.format(total))
#下载图片
def download(url,name):
    res = urllib.request.Request(url, headers=headers)
    html = urllib.request.urlopen(res).read().decode('gbk')
    down_url = re.search(r'<a href="" id="img">.+',html).group()
    down_url = ur + re.split('"',down_url)[5]
    try:
        data = urllib.request.urlopen(down_url,timeout=10).read()
    except Exception as e:
        print(e,'跳过此图片:'+name+'.jpg')
        return 0
    t = -1

    #img目录不存在自动创建
    if not os.path.exists('img'):
        os.makedirs('img')
    #该文件不存在时才下载(存储位置可自行修改,现在存在当前目录的img目录下)
    if not os.path.exists('img\\'+name+'.jpg'):
        with open('img\\'+name+'.jpg','wb')as f:
            f.write(data)
        print(name+'.jpg'+"\t\t下载成功")
        t = 1
    else:
        print(name + '.jpg' + "\t\t已存在")
        t = 0
    return t

#主程序
def main():
    picture(ur)
    print('4k图片网欢迎您'.center(20,'*'))

    for i,v in enumerate(url_list):
        print("{}、{}".format(i+1,v['title']))
    while True:
        try:
            t = int(input('要下载的图片类型(序号):'))
            if t not in range(1,13):
                raise IndexError
            break
        except ValueError:
            print('请输入正确的序号!')
        except IndexError:
            print('请输入正确的序号!')
    get_pic(url_list[t-1]['href'])

if __name__ == '__main__':
    main()

存储位置可自行修改,现在存在当前目录的img目录下

声明:初次学习爬虫,还有诸多不足,大神勿喷。

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
suger888 + 1 + 1 我很赞同!
冬天冷了多穿点 + 1 用心讨论,共获提升!
Thomas_Chen + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
lanlano 发表于 2022-7-14 11:46
本来想给你评分,加吾爱币、加热心值、点有用、点收藏呢,可惜没找到软件在哪。。我这种小白用不了,无法使用。。
推荐
CTZ 发表于 2022-7-18 19:14
楼主的学习网址有点新意

我也是初学,想请教个问题:
我使用的正则如下,很简陋:
url = re.findall('<img src="(.*)" alt=".*">',html)

将结果 写入html文件后查看,多了很多类似:
<div class="menu1">
</div>
<div id="main">
<div>
<a  target="_blank"><img src="http://img.netbian.com/file/2021/0723/116fe3f90228f905d7487fd1effe71.gif" width="100%" height="100%" border="0"/></a>
</div>
        <div class="foucs">
<div id="mainShow">
                <!--切换图片-->
                <div class="slide">
                        <ul id="bigImgArr" class="clearfix slide-ul">
            <li class="moveBigImg" id="pic0b"><a target="_blank"  title="4k壁纸">

这样的内容。

所以想问下,要怎么写正则,才能让获取的内容只有:
<img src="http://img.netbian.com/file/2022/0417/215931sId.jpg" alt="4k壁纸" />

而没有其他乱七八糟的东西
沙发
yjn866y 发表于 2022-7-14 11:36
4#
XiaoZouYu 发表于 2022-7-14 11:55
感谢楼主分享,requests功能强大点吧,urllib的这个包现在都不怎么用了
5#
by小白菜 发表于 2022-7-14 12:22
lanlano 发表于 2022-7-14 11:46
本来想给你评分,加吾爱币、加热心值、点有用、点收藏呢,可惜没找到软件在哪。。我这种小白用不了,无法使 ...

去看看python入门知识就会啦,
6#
CYANCHAOS 发表于 2022-7-14 12:22
这么优秀
7#
Wapj_Wolf 发表于 2022-7-14 12:34
可以直接用啊,我下来测试学习一下。
8#
kklzhw 发表于 2022-7-14 12:36

感谢楼主分享刚好学这个
9#
 楼主| Jarvis007 发表于 2022-7-14 13:02 |楼主
yjn866y 发表于 2022-7-14 11:36
楼主,,下载的是高清原图吗

不是原图,一个账号一天只能下载一张原图。
10#
 楼主| Jarvis007 发表于 2022-7-14 13:03 |楼主
XiaoZouYu 发表于 2022-7-14 11:55
感谢楼主分享,requests功能强大点吧,urllib的这个包现在都不怎么用了

这是19年刚学爬虫的时候发的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表