鱼C论坛

 找回密码
 立即注册
查看: 2225|回复: 18

[已解决]抄袭一个爬虫却只能得到文件夹而没有文件,问题出在哪里?

[复制链接]
发表于 2021-3-21 19:56:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re
import os
import requests
import easygui as g
import time


def get_html(url):
    header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0',
                      'Referer':'https://www.mzitu.com/japan/'}
    html = requests.get(url,headers=header)
    return html                    
def get_img(html):      
    html=html.text               
    img_re="https:\/\/imgpc\.iimzt\.com\/(?:.+\/)+.+(?:\.jpg)"  
    imgs=re.findall(img_re,html)   
    return imgs

def save_img(imgs,page):   
    for img_url in imgs:              
        res = get_html(img_url)      
        img = res.content            
        name = page+img_rul.split("/")[-1]   
        print(img_url)               
        with open(name, "wb") as f:   
            f.write(img)              

def download_mm():
    great = g.diropenbox()      
    os.chdir(great)            
    i=int(input("请输入开始页码(建议为1):"))
    n=int(input("请输入结束页码:"))
    while i<n:                  
        home_url="https://www.mzitu.com/page/"+str(i)+"/"           
        i+=1         
        model_html=get_html(home_url).text  
        model=re.compile("https:\/\/.{13}\/\d{5,6
        all_model= model.findall(model_html)  
        all_model=list(set(all_model))
        for each in all_model:

            img_url=get_html(each).text     
            dirs=re.search(r'([\u4e00-\u9fa5·]{2,16})',img_url).group()   
            print('开始下载%s模特的图片' % dirs)
            if os.path.exists(dirs):   
                pass
            else:
                os.mkdir(dirs)  
                os.chdir(dirs)   
                try:
                    nums=re.findall("https:\/\/.{13}\/\d{5,6}\/\d{2}",img_url)  
                    page_num=int(nums[-1].split("/")[-1])  
                    print('该模特共有%s张图片'% page_num)   
                    for mm in range(page_num):
                        mm_url=each+"/"+str(mm+1)   
                        print(mm_url)
                        mm_html=get_html(mm_url)   
                        imgs=get_img(mm_html)      
                        page=str(i-1)+"_"         
                        save_img(imgs,page)         
                        time.sleep(1)         

                except:                    
                    pass
                os.chdir(os.pardir)        

               
if __name__=="__main__":         
    download_mm()
                                
最佳答案
2021-3-23 15:31:24
dlzhr456 发表于 2021-3-22 18:48
img_url变量遍历imgs变量

你那个rul写错了看不出来吗?
img_url,不是img_rul
都提示的这么明显了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-21 20:23:39 | 显示全部楼层
def download_mm():
    great = g.diropenbox()      
    os.chdir(great)            
    i=int(input("请输入开始页码(建议为1):"))
    n=int(input("请输入结束页码:"))
    while i<n:                  
        home_url="https://www.mzitu.com/page/"+str(i)+"/"           
        i+=1         
        model_html=get_html(home_url).text  
        model=re.compile("https:\/\/.{13}\/\d{5,6}")#这里补充完整
        all_model= model.findall(model_html)  
        all_model=list(set(all_model))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-21 20:25:22 | 显示全部楼层

不对
我看了下虽然在运行
确实没有图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-21 20:36:43 From FishC Mobile | 显示全部楼层
网站不能访问了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 10:52:29 | 显示全部楼层
def save_img(imgs,page):   
    for img_url in imgs:              
        res = get_html(img_url)      
        img = res.content            
        name = page+img_rul.split("/")[-1]   # img_rul是个啥?
        print(img_url)               
        with open(name, "wb") as f:   
            f.write(img) 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-22 18:48:49 | 显示全部楼层

img_url变量遍历imgs变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-22 18:50:01 | 显示全部楼层
私はり 发表于 2021-3-21 20:25
不对
我看了下虽然在运行
确实没有图片

能帮助找下这是什么原因导致滴吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-22 18:58:25 | 显示全部楼层
原帖是可以下载图片滴
import re
import os
import requests
import easygui as g
import time

def get_html(url):
    header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0',
                      'Referer':'https://www.mzitu.com/japan/'}
    html=requests.get(url,headers=header)
    return html      

def get_img(html):
    html=html.text
    img_re="https:\/\/imgpc\.iimzt\.com\/(?:.+\/)+.+(?:\.jpg)" #详情页查找jpg图片正则表达式
    imgs=re.findall(img_re,html)
    return imgs


def save_img(imgs,page):
    for img_url in imgs:
        res = get_html(img_url)
        img = res.content
        name=page+img_url.split("/")[-1] #加个page,知道是第几页的模特,方便下次继续,嘿嘿嘿
        print(img_url)
        with open(name, "wb") as f:
            f.write(img)


def download_mm():
    great=g.diropenbox()
    os.chdir(great)
    i=int(input("请输入开始页码(建议为1):"))
    n=int(input("请输入结束页码:"))
    while i<n:
        home_url="https://www.mzitu.com/page/"+str(i)+"/"
        i+=1
        model_html=get_html(home_url).text
        model=re.compile("https:\/\/.{13}\/\d{5,6}")# 获取模特编号正则表达式
        all_model= model.findall(model_html)
        all_model=list(set(all_model)) #去重
        for each in all_model:           
            
            img_url=get_html(each).text
            dirs=re.search(r'([\u4e00-\u9fa5·]{2,16})',img_url).group()#"获取模特名字正则表达式"
            print('开始下载%s模特的图片' % dirs)
            if os.path.exists(dirs):
                pass
            else:
                os.mkdir(dirs)#给每个模特建个文件夹
                os.chdir(dirs)
                try:
                    nums=re.findall("https:\/\/.{13}\/\d{5,6}\/\d{2}",img_url)#获得页码正则表达式
                    page_num=int(nums[-1].split("/")[-1])
                    print('该模特共有%s张图片'% page_num)
                    for mm in range(page_num):
                        mm_url=each+"/"+str(mm+1)
                        print(mm_url)
                        mm_html=get_html(mm_url)
                        imgs=get_img(mm_html)
                        page=str(i-1)+"_"
                        save_img(imgs,page)
                        time.sleep(1)# 下载速控制一下 不要太快
                except:
                    pass
                os.chdir(os.pardir)
        

if __name__=="__main__":
    download_mm()

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 19:17:42 | 显示全部楼层
dlzhr456 发表于 2021-3-22 18:50
能帮助找下这是什么原因导致滴吗?

我是个小白
哈哈
不得行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 20:00:00 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2021-3-22 20:23 编辑
hrp 发表于 2021-3-21 20:36
网站不能访问了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 20:16:21 | 显示全部楼层
hrp 发表于 2021-3-22 20:00
难道就没人用浏览器去试试网站还能不能打开?还在研究为什么没下载到东西?

问题是可以打开啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 20:18:29 From FishC Mobile | 显示全部楼层
Daniel_Zhang 发表于 2021-3-22 20:16
问题是可以打开啊

我怎么打不开了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 20:22:36 | 显示全部楼层
hrp 发表于 2021-3-22 20:18
我怎么打不开了

不知道啊

截屏2021-03-22 20.22.05.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 20:23:44 From FishC Mobile | 显示全部楼层
Daniel_Zhang 发表于 2021-3-22 20:22
不知道啊

草率了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-22 20:50:07 | 显示全部楼层

麻烦大神提供点实质性的帮助  新人不易
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-22 20:59:36 | 显示全部楼层
def save_img(imgs,page):
     for img_url in imgs:
         res = get_html(img_url)
         img = res.content
         name=page+img_url.split("/")[-1] #加个page,知道是第几页的模特,方便下次继续,嘿嘿嘿
        print(img_url)
         with open(name, "wb") as f:
             f.write(img)
一直搞不懂这里面的page变量怎么来滴???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-23 00:20:54 | 显示全部楼层
本帖最后由 YunGuo 于 2021-3-23 00:24 编辑

你发在8楼的代码我用pycharm运行了,也debug了下,并没有问题,可以下载图片。
代码的逻辑是:
1、弹出的窗口选择一个保存图片的路径
2、输入开始和结束页码
3、组合图片列表页url,并用正则获取当前列表页所有图片页url(所有模特),再去重
4、循环获取当前图片页(模特),请求当前图片页,获取图片名(当前模特标题)
5、判断当前模特文件夹是否存在,存在则不执行任何操作,否则创建当前模特文件夹
6、获取当前模特有多少页,循环获取每一页中的图片url,请求图片,保存
7、循环执行3-6步,直到i = n结束运行
save_img函数两个参数,imgs是每一页中的图片url,page是用来命名图片的,当 i (也就是开始页)= 1的时候,
page = '1_'(代码是这一句 str(i - 1) + "_",比如当你获取的模特图片是属于第一页的,那么该模特所有图片名字前缀都是1_),下一页的模特以此类推2_、3_........,
其实你运行一遍就知道page是怎么来的了,如果代码执行有问题,你debug一下看是哪里出了问题,我运行可以成功下载图片。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-23 15:31:24 | 显示全部楼层    本楼为最佳答案   
dlzhr456 发表于 2021-3-22 18:48
img_url变量遍历imgs变量

你那个rul写错了看不出来吗?
img_url,不是img_rul
都提示的这么明显了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-23 20:46:20 | 显示全部楼层
YunGuo 发表于 2021-3-23 00:20
你发在8楼的代码我用pycharm运行了,也debug了下,并没有问题,可以下载图片。
代码的逻辑是:
1、弹出的 ...

感谢你给我这么详细的恢复  这也正是我真正需要滴  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 06:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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