0

这是一个关于是否有可能以及如何自动下载 scribd.com 搜索结果文档的一般问题。

设想:

我有一个 Scribd 帐户并找到我想要的文档。我通常然后必须单击下载按钮才能开始下载。

有什么自动化的想法吗?我正在使用 scribd api 和 python 来根据自动查询自动提取文档 ID,但是一旦我得到 doc_id,我必须亲自去每个文档页面并单击下载按钮以获取物理 txt/pdf 文件。我也想自动化这一步。

有任何想法吗?

4

1 回答 1

3

查看python-scribd文档scribdAPI 参考,任何可以为您提供文档 ID 或网站 URL 的对象也可以为您提供下载 URL。或者,如果您已经有一个文档 ID,您可以调用get来获取一个可以为您提供下载 URL 的对象。

很可能,你有一个Document对象,它有这个方法:

get_download_url(自我,doc_type='原始')

返回可用于下载文档静态版本的链接。

所以,无论你在哪里打电话get_scribd_url,只要打电话get_download_url

然后,为了下载结果,Python在标准库中内置了urllib2(2.x) 或(3.x),或者您可以使用或任何其他第三方库来代替。urllib.requestrequests

把它们放在一起作为一个例子:

# 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每个代码。

如果您想对结果进行后过滤,您可能希望使用基本属性之外的属性(或者您只是将它们传递给查询),这意味着您需要先调用load每个文档才能访问它们(所以在函数document.load()顶部添加is_document_i_want)。但实际上,这里没有什么复杂的。

于 2013-01-24T22:11:00.480 回答