我一直在使用刮刀从网站上获取大量的HTML和图片。我的刮刀工作正常,但目录大量填充,导致难以导航。我如何将其保存到子目录? 保存HTML的部分:
t = open(str(current)+".html", 'w+')
t.write(b)
t.close()
保存图像的部分:
urllib.request.urlretrieve(img, page+".gif")
答案 0 :(得分:5)
您只向我们展示了一些无用的代码,其中说写入子目录很简单,但首先需要创建一个。现在,我只能给你一些基本的例子,因为我不知道你的代码的其余部分是什么样的,希望这里有所帮助!
def create_folder(self, path):
try:
if os.path.isdir(path):
print("Error: The directory you're attempting to create already exists") # or just pass
else:
os.makedirs(path)
except IOError as exception:
raise IOError('%s: %s' % (path, exception.strerror))
return None
甚至更容易
os.makedirs("C:\\Example Folder\\")
或在Linux的情况下
os.makedirs('/home/' + os.getlogin() + '/Example Folder/')
然后像往常一样写入它,就像提供子目录的路径一样。
def write(self, path, text):
try:
if os.path.isfile(path):
return None # or print and error, or pass etc...
else:
with open(path, 'w') as outFile:
outFile.write(text)
except IOError as exception:
raise IOError("%s: %s" % (path, exception.strerror))
return None
在这种情况下,您将路径放在“path”参数中的子目录和包含“text”参数中的文本的变量中。您可以修改此函数以追加,写入字节等。
更新了有关您的评论的信息
使小规模python程序“更多”跨平台的一种非常简单的方法就是执行类似
的操作if sys.platform == 'win32':
print('This is windows')
elif sys.platform == 'linux2':
print('This is some form of linux')
您可以添加它来检查操作系统,然后根据操作系统运行您的块:)
是的,上述写入功能会覆盖文件是正确的,您可以通过将“w”标志更改为“a”来附加文件(添加新文本而不覆盖现有文本)
def append(self, path, text):
try:
if os.path.isfile(path):
with open(path, 'a') as outFile:
outFile.write(text)
except IOError as exception:
raise IOError('%s: %s' % (path, exception.strerror))
return None
进一步更新:
如果您不使用课程,可以删除“self”。
基于你最后的评论“我自己放了什么”我非常强烈建议你暂时放弃你的项目并首先学习python的基础知识......你可以在以下地方找到各种教程。< / p>
https://www.tutorialspoint.com/python/
https://docs.python.org/3/tutorial/
如果您使用的是较旧的版本,您只需更改为您在官方网站上使用的任何一个版本,我祝您好运,但不幸的是,如果不首先了解至少,我无法帮助您基础知识,对不起!
更新: 这是在很长一段时间后出现但我觉得有必要将这些添加到答案中,因为这篇文章最近再次被查看。
os.mkdir('\path\to\dir')
# is also valid
# Python 3+ use the following
if sys.platform.startswith('linux'):
print('This is linux')
#insert code here. We use .startswith('')
#becuase the version number was depricated
elif sys.platform.startswith('win'):
print('This is windows')