python爬取网站图片并保存到文件夹下(re和beautiful)

网址:人文景观_图片_高清人文景观壁纸-回车桌面

||由于这种网站是第一层放着只是放着单个链接(不太清楚的图片链接)然后打开获取其中单个稍微清楚的链接,这个链接也是不清楚的图片的链接,从这个网也源代码取大图的链接

ps:最好写一个time.sleep(3)来更改访问时间,防止被拉黑

爬取的总的源代码:

# https://up.enterdesk.com/edpic_source/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #大图链接
# https://up.enterdesk.com/edpic/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #小图链接  这里从网页源代码中找到大小图的链接来比较,找到不同处,然后更改
import os  #这个是新建文件夹的库
import time  #设定访问时间长短
import urllib.request,urllib.error  #导入请求网页的库
import re   #导入使用正则表达式需要的库
from bs4 import BeautifulSoup  #导入BeautifulSoup 这个库是来解析的库

baseurl = "https://www.enterdesk.com/zhuomianbizhi/renwenbizhi/"
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44"
}  #防着第一遍就访问不去网页
# print(os.getcwd())  #这一条命令可以显示当前所在目录
#请求网页
requ1 = urllib.request.Request(url=baseurl,headers=head)
#对请求网页进行打开
resp1 = urllib.request.urlopen(requ1)
#对返回的网页源代码实行中文类似的解码
html1 = resp1.read().decode('utf-8')
#对上面的字符类型的网页源代码进行解析,可以是电脑识别
soup1 = BeautifulSoup(html1,'html.parser')
# print(soup)  #可以测试是否可以接收到网页源代码

# 这里在当前目录下新建一个名为图片的目录来存储获取到的图片
dir_name = '图片'
if not os.path.exists(dir_name):
    os.mkdir(dir_name)

time.sleep(1)  #这里设置一个访问时长,防止把网页服务器爬崩
#从网页中获取第一个类似相册的图片的网页源代码
links1 = re.compile(r'<a href="(.*?)"')  #正则来匹配第一个图片的
for item in soup1.find_all("div",class_="egeli_pic_li"):
    item = str(item)


    try:  #这里添加异常处理是因为网页图片太多,需要向下滑动才能刷新,后面加载不出来,所以加一个异常处理
        link1 = re.findall(links1,item)[0]  #从网页源代码中查找每个链接
        # print(link)
    except(IndexError):
        pass

    #对获取的第一层链接,进行上述操作获取第二步的小图链接
    requ2 = urllib.request.Request(url=link1,headers=head)
    resp2 = urllib.request.urlopen(requ2)
    html2 = resp2.read().decode('utf-8')
    soup2 = BeautifulSoup(html2,'html.parser')
    # print(soup2)
    links2 = re.compile(r'src="(.*?)"')
    for it in soup2.find_all('img',class_="arc_main_pic_img"):
        it = str(it)
        link2 = re.findall(links2,it)[0]
        # print(link2)

        #从网页源代码中查看小链接和原网站下载下来网页的大图来链接区别,然后找规律来让小图链接改变成大图链接
        link3 = link2.replace('edpic','edpic_source')
        print(link3)

        #重新请求一下数据来为下文保存做准备
        requ3 = urllib.request.Request(url=link3,headers=head)
        resp3 = urllib.request.urlopen(requ3)
        #从最终获取到的大图链接保存到单个文件目录下,这里默认为python程序所在目录下一个文件目录下面
        file_name = link3.split('/')[-1]  #这个是以图片链接最后/的后面为名字命名,若是不改变,可以注释,并且把下面的file_name及前面的一个+号去掉
        with open(dir_name + '/' + file_name,"wb") as f:
            f.write(resp3.read())

 1.请求浏览器,获取源代码中要的第一层链接

# https://up.enterdesk.com/edpic_source/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #大图来凝结
# https://up.enterdesk.com/edpic/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #小图链接  这里从网页源代码中找到大小图的链接来比较,找到不同处,然后更改
import os  #这个是新建文件夹的库
import time
import urllib.request,urllib.error  #导入请求网页的库
import re   #导入使用正则表达式需要的库
from bs4 import BeautifulSoup  #导入BeautifulSoup 这个库是来解析的库

baseurl = "https://www.enterdesk.com/zhuomianbizhi/renwenbizhi/"
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44"
}  #防着第一遍就访问不去网页
#请求网页
requ1 = urllib.request.Request(url=baseurl,headers=head)
#对请求网页进行打开
resp1 = urllib.request.urlopen(requ1)
#对返回的网页源代码实行中文类似的解码
html1 = resp1.read().decode('utf-8')
#对上面的字符类型的网页源代码进行解析,可以是电脑识别
soup1 = BeautifulSoup(html1,'html.parser')
# print(soup)  #可以测试是否可以接收到网页源代码

time.sleep(1)  #这里设置一个访问时长,防止把网页服务器爬崩
#从网页中获取第一个类似相册的图片的网页源代码
links1 = re.compile(r'<a href="(.*?)"')  #正则来匹配第一个图片的
for item in soup1.find_all("div",class_="egeli_pic_li"):
    item = str(item)


    try:  #这里添加异常处理是因为网页图片太多,需要向下滑动才能刷新,后面加载不出来,所以加一个异常处理
        link1 = re.findall(links1,item)[0]  #从网页源代码中查找每个链接
        # print(link)
    except(IndexError):
        pass

2.打开第一层的链接获取小图的链接

# https://up.enterdesk.com/edpic_source/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #大图来凝结
# https://up.enterdesk.com/edpic/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #小图链接  这里从网页源代码中找到大小图的链接来比较,找到不同处,然后更改
import os  #这个是新建文件夹的库
import time  
import urllib.request,urllib.error  #导入请求网页的库
import re   #导入使用正则表达式需要的库
from bs4 import BeautifulSoup  #导入BeautifulSoup 这个库是来解析的库

baseurl = "https://www.enterdesk.com/zhuomianbizhi/renwenbizhi/"
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44"
}  #防着第一遍就访问不去网页
#请求网页
requ1 = urllib.request.Request(url=baseurl,headers=head)
#对请求网页进行打开
resp1 = urllib.request.urlopen(requ1)
#对返回的网页源代码实行中文类似的解码
html1 = resp1.read().decode('utf-8')
#对上面的字符类型的网页源代码进行解析,可以是电脑识别
soup1 = BeautifulSoup(html1,'html.parser')
# print(soup)  #可以测试是否可以接收到网页源代码


time.sleep(1)  #这里设置一个访问时长,防止把网页服务器爬崩

    try:  #这里添加异常处理是因为网页图片太多,需要向下滑动才能刷新,后面加载不出来,所以加一个异常处理
        link1 = re.findall(links1,item)[0]  #从网页源代码中查找每个链接
        # print(link)
    except(IndexError):
        pass

    #对获取的第一层链接,进行上述操作获取第二步的小图链接
    requ2 = urllib.request.Request(url=link1,headers=head)
    resp2 = urllib.request.urlopen(requ2)
    html2 = resp2.read().decode('utf-8')
    soup2 = BeautifulSoup(html2,'html.parser')
    # print(soup2)
    links2 = re.compile(r'src="(.*?)"')
    for it in soup2.find_all('img',class_="arc_main_pic_img"):
        it = str(it)
        link2 = re.findall(links2,it)[0]
        # print(link2)

3.改变小图链接到大图

# https://up.enterdesk.com/edpic_source/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #大图链接
# https://up.enterdesk.com/edpic/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #小图链接  这里从网页源代码中找到大小图的链接来比较,找到不同处,然后更改
import os  #这个是新建文件夹的库
import time
import urllib.request,urllib.error  #导入请求网页的库
import re   #导入使用正则表达式需要的库
from bs4 import BeautifulSoup  #导入BeautifulSoup 这个库是来解析的库

baseurl = "https://www.enterdesk.com/zhuomianbizhi/renwenbizhi/"
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44"
}  #防着第一遍就访问不去网页
#请求网页
requ1 = urllib.request.Request(url=baseurl,headers=head)
#对请求网页进行打开
resp1 = urllib.request.urlopen(requ1)
#对返回的网页源代码实行中文类似的解码
html1 = resp1.read().decode('utf-8')
#对上面的字符类型的网页源代码进行解析,可以是电脑识别
soup1 = BeautifulSoup(html1,'html.parser')
# print(soup)  #可以测试是否可以接收到网页源代码

time.sleep(1)  #这里设置一个访问时长,防止把网页服务器爬崩

    try:  #这里添加异常处理是因为网页图片太多,需要向下滑动才能刷新,后面加载不出来,所以加一个异常处理
        link1 = re.findall(links1,item)[0]  #从网页源代码中查找每个链接
        # print(link)
    except(IndexError):
        pass

    #对获取的第一层链接,进行上述操作获取第二步的小图链接
    requ2 = urllib.request.Request(url=link1,headers=head)
    resp2 = urllib.request.urlopen(requ2)
    html2 = resp2.read().decode('utf-8')
    soup2 = BeautifulSoup(html2,'html.parser')
    # print(soup2)
    links2 = re.compile(r'src="(.*?)"')
    for it in soup2.find_all('img',class_="arc_main_pic_img"):
        it = str(it)
        link2 = re.findall(links2,it)[0]
        # print(link2)

        #从网页源代码中查看小链接和原网站下载下来网页的大图来链接区别,然后找规律来让小图链接改变成大图链接
        link3 = link2.replace('edpic','edpic_source')
        print(link3)

4.下载网页图片保存到单个目录下面

# https://up.enterdesk.com/edpic_source/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #大图链接
# https://up.enterdesk.com/edpic/aa/ec/48/aaec4824403a6bbda9061b3494a693d2.jpg  #小图链接  这里从网页源代码中找到大小图的链接来比较,找到不同处,然后更改
import os  #这个是新建文件夹的库
import time  #设定访问时间长短
import urllib.request,urllib.error  #导入请求网页的库
import re   #导入使用正则表达式需要的库
from bs4 import BeautifulSoup  #导入BeautifulSoup 这个库是来解析的库

baseurl = "https://www.enterdesk.com/zhuomianbizhi/renwenbizhi/"
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44"
}  #防着第一遍就访问不去网页
# print(os.getcwd())  #这一条命令可以显示当前所在目录
#请求网页
requ1 = urllib.request.Request(url=baseurl,headers=head)
#对请求网页进行打开
resp1 = urllib.request.urlopen(requ1)
#对返回的网页源代码实行中文类似的解码
html1 = resp1.read().decode('utf-8')
#对上面的字符类型的网页源代码进行解析,可以是电脑识别
soup1 = BeautifulSoup(html1,'html.parser')
# print(soup)  #可以测试是否可以接收到网页源代码

# 这里在当前目录下新建一个名为图片的目录来存储获取到的图片
dir_name = '图片'
if not os.path.exists(dir_name):
    os.mkdir(dir_name)

time.sleep(1)  #这里设置一个访问时长,防止把网页服务器爬崩
#从网页中获取第一个类似相册的图片的网页源代码
links1 = re.compile(r'<a href="(.*?)"')  #正则来匹配第一个图片的
for item in soup1.find_all("div",class_="egeli_pic_li"):
    item = str(item)


    try:  #这里添加异常处理是因为网页图片太多,需要向下滑动才能刷新,后面加载不出来,所以加一个异常处理
        link1 = re.findall(links1,item)[0]  #从网页源代码中查找每个链接
        # print(link)
    except(IndexError):
        pass

    #对获取的第一层链接,进行上述操作获取第二步的小图链接
    requ2 = urllib.request.Request(url=link1,headers=head)
    resp2 = urllib.request.urlopen(requ2)
    html2 = resp2.read().decode('utf-8')
    soup2 = BeautifulSoup(html2,'html.parser')
    # print(soup2)
    links2 = re.compile(r'src="(.*?)"')
    for it in soup2.find_all('img',class_="arc_main_pic_img"):
        it = str(it)
        link2 = re.findall(links2,it)[0]
        # print(link2)

        #从网页源代码中查看小链接和原网站下载下来网页的大图来链接区别,然后找规律来让小图链接改变成大图链接
        link3 = link2.replace('edpic','edpic_source')
        print(link3)

        #重新请求一下数据来为下文保存做准备
        requ3 = urllib.request.Request(url=link3,headers=head)
        resp3 = urllib.request.urlopen(requ3)
        #从最终获取到的大图链接保存到单个文件目录下,这里默认为python程序所在目录下一个文件目录下面
        file_name = link3.split('/')[-1]  #这个是以图片链接最后/的后面为名字命名,若是不改变,可以注释,并且把下面的file_name及前面的一个+号去掉
        with open(dir_name + '/' + file_name,"wb") as f:
            f.write(resp3.read())

PS:这里可能是这个网站的原因,下载的麻烦并且少,我爬取别的网站可以爬取到了七百多张,到服务器超时的时候才断开,我们可以利用这个思想去爬取一些你想要的链接。【ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。】

    原文作者:exemplify
    原文地址: https://blog.csdn.net/weixin_57431906/article/details/121318764
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞