dlzhr456 发表于 2021-3-21 19:56:39

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

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-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))

私はり 发表于 2021-3-21 20:25:22

私はり 发表于 2021-3-21 20:23


不对
我看了下虽然在运行
确实没有图片

hrp 发表于 2021-3-21 20:36:43

网站不能访问了吧

笨鸟学飞 发表于 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)

dlzhr456 发表于 2021-3-22 18:48:49

笨鸟学飞 发表于 2021-3-22 10:52


img_url变量遍历imgs变量

dlzhr456 发表于 2021-3-22 18:50:01

私はり 发表于 2021-3-21 20:25
不对
我看了下虽然在运行
确实没有图片

能帮助找下这是什么原因导致滴吗?

dlzhr456 发表于 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()

私はり 发表于 2021-3-22 19:17:42

dlzhr456 发表于 2021-3-22 18:50
能帮助找下这是什么原因导致滴吗?

我是个小白
哈哈
不得行

hrp 发表于 2021-3-22 20:00:00

本帖最后由 hrp 于 2021-3-22 20:23 编辑

hrp 发表于 2021-3-21 20:36
网站不能访问了吧

Daniel_Zhang 发表于 2021-3-22 20:16:21

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

问题是可以打开啊{:10_245:}

hrp 发表于 2021-3-22 20:18:29

Daniel_Zhang 发表于 2021-3-22 20:16
问题是可以打开啊

我怎么打不开了

Daniel_Zhang 发表于 2021-3-22 20:22:36

hrp 发表于 2021-3-22 20:18
我怎么打不开了

不知道啊{:10_245:}

hrp 发表于 2021-3-22 20:23:44

Daniel_Zhang 发表于 2021-3-22 20:22
不知道啊

{:10_269:}{:10_269:}草率了

dlzhr456 发表于 2021-3-22 20:50:07

hrp 发表于 2021-3-22 20:23
草率了

麻烦大神提供点实质性的帮助新人不易

dlzhr456 发表于 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变量怎么来滴???

YunGuo 发表于 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一下看是哪里出了问题,我运行可以成功下载图片。

笨鸟学飞 发表于 2021-3-23 15:31:24

dlzhr456 发表于 2021-3-22 18:48
img_url变量遍历imgs变量

你那个rul写错了看不出来吗?
img_url,不是img_rul
都提示的这么明显了

dlzhr456 发表于 2021-3-23 20:46:20

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

感谢你给我这么详细的恢复这也正是我真正需要滴谢谢
页: [1]
查看完整版本: 抄袭一个爬虫却只能得到文件夹而没有文件,问题出在哪里?