这是一个普遍的问题,关于是否有可能,如果可能,如何自动下载scribd.com搜索结果文档。
情景:
我有一个Scribd帐户并找到我想要的文件。我通常必须单击下载按钮开始下载。
有关自动化的想法吗?我正在使用scribd api和python根据自动查询自动提取文档ID,但是一旦我获得doc_id,我必须实际访问每个文档页面并单击下载按钮以获取物理txt / pdf文件。我也想自动完成这一步。
任何想法?
答案 0 :(得分:3)
查看python-scribd
documentation或scribd
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
)。但实际上,这里没什么复杂的。