如何自动下载Scribd.com上的.txt文件
这是一个关于是否可以自动下载scribd.com搜索结果文档的普遍问题,如果可以的话,应该怎么做。
场景:
我有一个Scribd账户,找到了我想要的文档。通常我需要点击下载按钮来开始下载。
有没有办法自动化这个过程?我正在使用Scribd的API和Python来根据自动化查询提取文档的ID,但一旦我得到了文档ID,我还得亲自去每个文档页面,点击下载按钮才能获取实际的txt/pdf文件。我想把这个步骤也自动化。
有什么想法吗?
1 个回答
查看一下python-scribd
的文档或者scribd
的API参考,任何能够提供文档ID或网站链接的对象,也能提供下载链接。或者,如果你已经有了文档ID,你可以直接调用get
来获取一个可以提供下载链接的对象。
你很可能有一个Document
对象,它有这样一个方法:
get_download_url
(self, doc_type='original')这个方法会返回一个可以用来下载文档静态版本的链接。
所以,无论你在哪里调用get_scribd_url
,只需调用get_download_url
即可。
然后,要下载结果,Python内置了urllib2
(2.x版本)或urllib.request
(3.x版本),你也可以使用requests
或其他第三方库。
把这些结合起来作为一个例子:
# do all the stuff to set up the api_key, get a `User` object, etc.
def is_document_i_want(document):
return document.author == "Me"
urls = [document.get_download_url() for document in user.all()
if is_document_i_want(document)]
for url in urls:
path = urllib.parse.urlparse(url).path
name = os.path.basename(path)
u = urllib.request.urlopen(url)
with open(name, 'w') as f:
f.write(u.read())
print('Wrote {} as {}'.format(url, name))
你可能想用user.find
而不是user.all
。或者,如果你已经写了获取文档ID的代码,不想改动它,可以用user.get
来处理每一个ID。
如果你想对结果进行后续筛选,可能需要使用一些基本属性以外的属性(否则你早就把它们传给查询了),这就意味着在访问它们之前需要对每个文档调用load
(所以在is_document_i_want
函数的开头加上document.load()
)。不过,其实这里没有什么复杂的内容。