找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1844|回复: 1

[求助] 这段爬虫代码报错求助

1

主题

2

帖子

2

积分

贫民

积分
2
xiao12mm 发表于 2018-9-16 09:13:43 | 显示全部楼层 |阅读模式
import re
import requests
import os
class DownPic:
    def __init__(self,url,num):
        self.url = url
        self.num = num
        self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
    def get_pic_url(self,url):
        respone = requests.get(url,headers = self.headers)
        url_text = respone.text
        regex_url = '<img.*?data-original="(.*?)".*?>'
        regex_name = '<img.*?alt="(.*?)".*?>'
        pic_urls = re.findall(regex_url,url_text,re.S)
        pic_names = re.findall(regex_name,url_text,re.DOTALL)
        return pic_urls,pic_names
    def down_pic(self,urls,pic_names,i):
        for j in range(len(urls)):
            #读图片
            url,pic_name = urls[j],pic_names[j]
            pic_name = re.sub(r'[!\.。\?,!]','',pic_name)
            respone = requests.get(url,self.headers)
            pic_text = respone.content
            #写图片
            suffix = os.path.splitext(url)[1]
            full_file_name = pic_name + suffix
            #print(full_file_name)
            #建文件夹
            folder = 'img' + '/' + str(i)
            if not os.path.exists(folder):
                os.mkdir(folder)
            with open(folder + '/' + full_file_name,'wb') as f:
                f.write(pic_text)
                str = full_file_name + '   写入完成'
                print(str)


    def run(self):
        for i in range(1,self.num):
            url = self.url + str(i)
            urls = self.get_pic_url(url)[0]
            pic_names = self.get_pic_url(url)[1]
            self.down_pic(urls,pic_names,i)




if __name__ == '__main__':
    downpic = DownPic('http://www.doutula.com/photo/list/?page=',100)
    downpic.run()


报错如下:
  File "E:/360Downloads/test/test.py", line 29, in down_pic
    folder = 'img' + '/' + str(i)
UnboundLocalError: local variable 'str' referenced before assignment

为什么这个地方报错呢?求解答
folder = 'img' + '/' + str(i)

















回复

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2018-9-16 18:01:24 | 显示全部楼层
str(i)的i从哪来的,没看错的话你这用的是j迭代的,整个代码到是有个i,但那是run这个函数的局部变量,另外一个函数不能用
回复 支持 反对

使用道具 举报

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

本版积分规则

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