这是一个关于是否有可能以及如何自动下载 scribd.com 搜索结果文档的一般问题。
设想:
我有一个 Scribd 帐户并找到我想要的文档。我通常然后必须单击下载按钮才能开始下载。
有什么自动化的想法吗?我正在使用 scribd api 和 python 来根据自动查询自动提取文档 ID,但是一旦我得到 doc_id,我必须亲自去每个文档页面并单击下载按钮以获取物理 txt/pdf 文件。我也想自动化这一步。
有任何想法吗?
查看python-scribd
文档或scribd
API 参考,任何可以为您提供文档 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.request
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
)。但实际上,这里没有什么复杂的。