abcfy2 / getComic

Download tencent comic-下载腾讯漫画
http://my.oschina.net/abcfy2/blog/294668
195 stars 77 forks source link

Bug Report:关于章节目录和下载中的字符处理问题 #15

Closed shfxxer closed 7 years ago

shfxxer commented 7 years ago

首先感谢作者,通过手动update cookies成功抓取vip分卷

出问题的页面是这个: File "D:\Libs\getComic\getComic.py", line 219, in __download_one_img with open(imgPath, 'wb') as f: FileNotFoundError: [Errno 2] No such file or directory: 'D:/MCon/Download\美食 的俘虏\第0212话-第212话 选手入场!! \017.jpg'

实际文件目录为第0212话-第212话 选手入场!!

估计是章节名在双!!后增加了一个空格,然后在Windows 默认建立文件夹参数下最后空格会被吞掉。 之前还疑似出现过分卷卷名创建文件夹时出现windows 不合法字符无法创建文件夹的问题。

abcfy2 commented 7 years ago

空格问题我应该是已经处理了才对,能否给出你的命令行?我尝试重现一下

shfxxer commented 7 years ago

并非命令行,是用getcomic-gui+PyQt5 分析下载(python3.6)

漫画页面http://ac.qq.com/Comic/ComicInfo/id/530875 第212话

clone时间2017.6.13

abcfy2 commented 7 years ago

在linux下并未重现这个问题,我记得我是处理过空格的,用的python的路径拼接,类库中已经处理了空格问题,我怀疑是windows这反人类的反斜杠导致的,我需要再确认下,待会我找个windows模拟环境测试下。

abcfy2 commented 7 years ago

default

我在windows下也并未重现你的问题。我看你报错的行,似乎在前面加了不少内容,确认下你的修改有没有影响这里的内容?另外,你的路径为何斜杠不统一?你是怎么输入进去的?如果在windows下的图形界面浏览的话,生成的路径应该统一都是右斜杠才对啊

abcfy2 commented 7 years ago

212的章节名后面本来就有个空格,!!后面本来就跟了个空格,所以不是空格引起的问题

shfxxer commented 7 years ago

Exception in thread Thread-1: Traceback (most recent call last): File "C:\Program Files\Python\Python36\lib\threading.py", line 916, in _bootst rap_inner self.run() File "C:\Program Files\Python\Python36\lib\threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "D:\Libs\getComic\getComic.py", line 210, in __download_one_img with open(imgPath, 'wb') as f: FileNotFoundError: [Errno 2] No such file or directory: 'D:/MCon/Download\美食 的俘虏\第0212话-第212话 选手入场!! \001.jpg'

之前添加部分解析cookie代码增加的行数,现在是revert到git原始状态的下载结果,无任何添加剂

至于windows反斜杠的问题,默认下载路径是正斜杠,但随意在浏览选择下载文件夹后路径即变成反斜杠。

//以下纯净猜测

python似乎是支持斜杠反斜杠混用的下载模式,如果是斜杠反斜杠混用导致程序出错,我不该下载只有212页面失败,其他也应该都失败才对。

212章节名后有个空格没错,!!后面也跟个空格没错,但是windows创建的文件夹后没有空格,windows新建文件夹名最后的空格会被全部吞掉。 所以下载路径是D:/MCon/Download\美食的俘虏\第0212话-第212话 选手入场!!(空格)\001.jpg 但实际创建的目录结构是D:/MCon/Download\美食的俘虏\第0212话-第212话 选手入场!!(无空格) 然后open失败,无上级目录

abcfy2 commented 7 years ago

这里我用的是os.path.join()这个python内置的方法拼接目录的,这里我已经考虑过跨平台支持,所以并不是直接用string add的形式拼接字符串拼出路径,使用os模块帮我处理好路径分隔符以及特殊字符的问题,理论上不应该出问题才对。我在windows环境下使用图形界面,点浏览按钮,得到的路径应该是右斜杠才对,你的路径为何都是左斜杠?如果不是你自己输入的,那就可能是你在cygwin/mingw32这种posix模拟环境下运行的程序才可能产生这种posix路径规则,可能会导致一些BUG的产生。尝试放在cmd或者powershell这种纯windows环境下执行看看呢?

shfxxer commented 7 years ago

那么是运行环境问题?

cmd下运行getComic-gui.py选择目录为反斜杠,直接运行pyinstaller打包好的exe同样是反斜杠。

系统win7 x64 sp1+py 3.6 +vs2015 update3 +cygwin64 2.877

shfxxer commented 7 years ago

http://pic.yupoo.com/shfxxer/Gxmuia4j/medish.jpg http://pic.yupoo.com/shfxxer/GxmuijAm/medish.jpg

这是截图

abcfy2 commented 7 years ago

奇了怪了,你的python难道是在cygwin下编译的?如果是官方下载的windows版本的python,应该不会产生/左斜杠的路径分隔符才对,在cygwin下运行python getComic-gui.py有可能产生左斜杠的路径分隔符。这个我当时测试过的,只不过没测试在cygwin下运行有空格会不会产生BUG,毕竟cygwin只是模拟posix运行环境,并且windows也并不是posix操作系统,只是实现了部分posix规范而已

abcfy2 commented 7 years ago

似乎选择路径之后会变成左斜杠。奇怪,以前我怎么没这个印象? 1 2

你试试用默认的路径呢?就是~/tencent_comic,这个经os.path.expand之后会得到对应操作系统的路径

abcfy2 commented 7 years ago

似乎你是对的,windows下无论图形界面还是mkdir命令,都无法创建出" abc "这样的目录,但是在cygwin下用mkdir却可以成功,在cygwin下创建出这样的目录,在windows图形界面下无法删除,只能在cygwin下用rm -fr删除。如果是这样的话,在章节名统一加上.strip()去除掉两边的空格算了,防止产生这样的BUG。待会递交一版,你再试试