hj170520 发表于 2020-6-14 12:17

新建文件夹再把文件放到对应的文件夹出问题了。(python)

本帖最后由 hj170520 于 2020-6-15 00:16 编辑

爬取“人人网”的照片的时候,为了分类“相册”,把相册放到对应的“文件夹”。
但爬取过程中有的成功放到了文件夹里,有的没有,是不是他们的编码有问题?
爬取过程中“中文字符”必须转码,似乎有的没有转码成功,怎么解决这种事情呢?

核心代码是这块,cookies 我就不放了额

import requests
import os
import re


class download():
    def __init__(self):
      self.url = 'http://photo.renren.com/photo/我的账户对应ID/albumlist/v7'
      self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                                    'Chrome/69.0.3497.100 Safari/537.36'}
      self.cookies =
      self.albumName = []
      self.albumId = []
      self.album = []
      self.albumurl = []
      self.albumlist = {}
      self.photoid = []
      self.photourl = ''

    def album_information(self):
      req = requests.get(self.url, headers=self.headers, cookies=self.cookies)
      req.encoding = req.apparent_encoding
      self.albumName = re.findall(r'\"albumName\":\"(.*?)\"', req.text)
      self.albumId = re.findall(r'\"albumId\":\"(.*?)\"', req.text)
      for i in range(len(self.albumName)):
            self.album.append(str(self.albumName).encode('utf-8').decode('unicode-escape', "ignore"))
            self.albumurl.append('http://photo.renren.com/photo/我的账户对应ID/album-%s/v7' % self.albumId)
      for ii in range(len(self.album)):
            self.albumlist] = self.albumurl
      return self.album, self.albumurl, self.albumlist

    def album_creat(self):
      for i in range(len(self.album)):
            if not os.path.exists('./%s' % self.album):
                os.makedirs('./%s' % self.album)

    def photo_download(self):
      for i in range(len(self.albumlist)):
            self.albumdir = list(self.albumlist.keys())
            req = requests.get(self.albumurl, headers=self.headers, cookies=self.cookies)
            req.encoding = req.apparent_encoding
            self.photoid = re.findall(r'\"photoId\":\"(.*?)\"', req.text)
            self.photourl = 'http://photo.renren.com/photo/我的账户对应ID/photo-%s/v7' % self.photoid
            req = requests.get(self.photourl, headers=self.headers, cookies=self.cookies)
            self.largeurl = re.findall(r'\"largeurl\":\"(.*?)\"', req.text)
            for ii in range(len(self.largeurl)):
                if re.search(r'\\/', self.largeurl):
                  self.largeurl_new = self.largeurl.replace('\\/', '/')
                  req = requests.get(self.largeurl_new, headers=self.headers, cookies=self.cookies)
                  with open('./%s' % self.albumdir + str(ii) + '.jpg', 'wb') as f:
                        f.write(req.content)
                else:
                  req = requests.get(self.largeurl, headers=self.headers, cookies=self.cookies)
                  with open('./%s/' % self.albumdir + str(ii) + '.jpg', 'wb') as f:
                        f.write(req.content)


if __name__ == '__main__':
    d = download()
    d.album_information()
    d.album_creat()
    d.photo_download()

有大佬给把把脉吗?

用图片更直观显示:

有的在文件夹内编号是0,1,2,3 但有的是在文件夹外,就不是编号0,1,2,3而是多了个文件夹的名字

rsnodame 发表于 2020-6-14 13:52

你代码的第50行与第54行,一个是【open('./%s'】,一个是【open('./%s/'】,相差了个【/】,造成if里语句执行时没按你期望的结果{:301_971:}

我觉得with open 那句完全可以写一遍就行
if re.search(r'\\/', self.largeurl):
    self.largeurl_new = self.largeurl.replace('\\/', '/')

req = requests.get(self.largeurl_new, headers=self.headers, cookies=self.cookies)
with open('./%s/' % self.albumdir + str(ii) + '.jpg', 'wb') as f:
    f.write(req.content)

hj170520 发表于 2020-6-14 14:26

rsnodame 发表于 2020-6-14 13:52
你代码的第50行与第54行,一个是【open('./%s'】,一个是【open('./%s/'】,相差了个【/】,造成if里语句执 ...

{:301_1001:}厉害了大佬。
人人网编码转换总是出问题那又怎么解决呢?{:301_991:}
新建文件的名称经常是乱码“”

rsnodame 发表于 2020-6-14 14:58

hj170520 发表于 2020-6-14 14:26
厉害了大佬。
人人网编码转换总是出问题那又怎么解决呢?
新建文件的名称经常 ...

{:301_991:} 这个……没研究过人人的网页,说不上啥…………看到你用了【self.album.append(str(self.albumName).encode('utf-8').decode('unicode-escape', "ignore"))】做转码,我能想到的就是发现乱码后定位到对应页面,研究一下具体是啥编码

hj170520 发表于 2020-6-14 15:37

rsnodame 发表于 2020-6-14 14:58
这个……没研究过人人的网页,说不上啥…………看到你用了【self.album.append(str(self.alb ...

{:301_986:}好吧。不过还是谢谢大佬了{:301_991:}
页: [1]
查看完整版本: 新建文件夹再把文件放到对应的文件夹出问题了。(python)