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

时间:2013-01-24 21:57:05

标签: python download scribd

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

情景:

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

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

任何想法?

1 个答案:

答案 0 :(得分:3)

查看python-scribd documentationscribd API reference,任何可以为您提供文档ID或网站网址的对象也可以为您提供下载网址。或者,如果您已有文档ID,则只需调用get即可获取可以为您提供下载URL的对象。

最有可能的是,你有一个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

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