如何自动下载Scribd.com上的.txt文件

0 投票
1 回答
1952 浏览
提问于 2025-04-17 13:35

这是一个关于是否可以自动下载scribd.com搜索结果文档的普遍问题,如果可以的话,应该怎么做。

场景:

我有一个Scribd账户,找到了我想要的文档。通常我需要点击下载按钮来开始下载。

有没有办法自动化这个过程?我正在使用Scribd的API和Python来根据自动化查询提取文档的ID,但一旦我得到了文档ID,我还得亲自去每个文档页面,点击下载按钮才能获取实际的txt/pdf文件。我想把这个步骤也自动化。

有什么想法吗?

1 个回答

3

查看一下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())。不过,其实这里没有什么复杂的内容。

撰写回答