鱼C论坛

 找回密码
 立即注册
楼主: tzhang56

[作品展示] Python批量爬取写真集

  [复制链接]
发表于 2021-7-22 10:09:30 | 显示全部楼层
有趣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-22 11:54:44 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-22 15:30:36 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-22 15:52:11 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-22 21:32:38 | 显示全部楼层
shawnlei 发表于 2020-3-11 17:20
大佬怎么都是failed呀?我是小白

由于网址变化,之前的代码也需要跟着变化,最新可用代码如下:
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 21:34:53 | 显示全部楼层
现在是21年7月23日,由于网址变化,我在楼主的代码基础上更新如下即可使用:
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 21:39:07 | 显示全部楼层
yu411038522 发表于 2021-7-9 15:34
发生异常: ConnectionError
HTTPSConnectionPool(host='mtl.gzhuibei.com', port=443): Max retries excee ...

现在是21年7月,由于网站改变,我在楼主代码基础上更新后又可以重新下载了。
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 21:40:18 | 显示全部楼层
时间守护 发表于 2021-6-30 10:53
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/网页2.py", line 1, in
  ...

现在是21年7月,由于网站变化,我在楼主代码基础上更新代码后可以用啦!代码如下:
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 21:44:17 | 显示全部楼层
tzhang56 发表于 2020-3-12 01:43
谢谢提出这个问题。你在D盘先新建一个‘pics’的文件夹,然后再运行程序试试。

现在是2021年7月23日,由于网站变化,我在楼主的代码基础上更改代码后可以重新下载了! 代码如下
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]             #每张照片的具体网址
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 21:45:53 | 显示全部楼层
时间守护 发表于 2021-6-30 10:53
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/网页2.py", line 1, in
  ...

现在是2021年7月23日,由于网站变化,我在楼主的代码基础上更改代码后可以重新下载了! 代码如下
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]             #每张照片的具体网址
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 21:46:31 | 显示全部楼层
fumun 发表于 2021-5-14 20:03
网站现在应该和当时不一样了

现在是2021年7月23日,由于网站变化,我在楼主的代码基础上更改代码后可以重新下载了! 代码如下
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]             #每张照片的具体网址
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 21:47:52 | 显示全部楼层

现在是2021年7月23日,由于网站变化,我在楼主的代码基础上更改代码后可以重新下载了! 代码如下
import requests
import urllib.request
import os
from bs4 import BeautifulSoup as bs      # 由于网站变化,需要导入BeauifulSoup来下载图片
import re                                # 由于网站变化,需要导入're'正则表达式来下载图片
n=int(input('起始写真编号:'))
amount = int(input('希望获取多少套写真?\n:'))
amount -= 1                              # pyhon众所周知,从‘0’开始
location = "D://pics"
if not os.path.exists(location):
    os.mkdir(location)                   # 在D盘新建文件夹pics
    
url_0 = "http://www.gzhuibei.com/html/"  # 写真集网址前半部分
url_01 = "http://www.gzhuibei.com"       # 写真集网址具体图片地址前半部分

while amount>=0:
    url0 = url_0 + str(n+amount)         # 具体写真集编号网址
    
    for num in range(10):                # 一个写真集里有很多图片,这里设置最多爬10张
        if num == 0:                     # 根据网址规律,得出每一套写真第一张照片网址
            url = url0 + ".html"         
        else:                            # 根据网址规律,得出第2张后的每张写真图网址
            url = url0 + "_" + str(num+1) + ".html"                   
        
        try:                             # 如果下载超出该套写真的图片数则提示并停止该套写真下载
            resp = urllib.request.urlopen(url)
        except :
            print("这套写真只有这么多图片啦!")
            break
        
        html = resp.read().decode("utf-8") 
        soup = bs(html,"html.parser")
        list1 = []                       # 用于提取每张图片在服务器上的具体地址
        for each in soup.find_all('img'): 
            list1.append(each["src"])
        
        root = location+"//"+ url.split('/')[-2]+"//"           #保存写真路径
        path = root + str(n+amount) + "_" + str(num+1)+".jpg"   #写真集内图片用序号命名
        
        try:
            if not os.path.exists(root):
                os.mkdir(root)                         #没有文件夹则创建新文件夹
            if not os.path.exists(path):
                url_02 = url_01 + list1[1]             #每张照片的具体网址
                r = requests.get(url_02)               #爬取网页
                
                if r.status_code == 200:               #判断图片是否存在,存在则保存
                    with open(path, 'wb') as f:
                        f.write(r.content)
                        f.close()
                        print("file saved successfully!")
                else:                                  #不存在则跳过
                    pass
            else:
                print("file already exists!")
        except:
            print("failed!")
            
    amount-=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-22 22:03:00 | 显示全部楼层
yyds
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-22 22:47:26 | 显示全部楼层
前来膜拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-23 11:03:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-12 15:07:37 | 显示全部楼层
郭德纲   古典风格撒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 15:43:49 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-12 16:25:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-12 18:50:53 From FishC Mobile | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-12 18:56:36 | 显示全部楼层
其实只是来看看网址的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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