2013-01-24 69 views
0

這是一個普遍的問題,它是否有可能以及如何自動下載scribd.com搜索結果文檔。如何自動從Scribd.com下載.txt文件

場景:

我有一個Scribd帳戶,並找到一個文件我想要的。我通常必須點擊下載按鈕才能開始下載。

任何想法自動化?我使用scribd api和python根據自動查詢自動提取文檔ID,但是一旦我得到doc_id,我必須物理地訪問每個文檔頁面並單擊下載按鈕以獲得物理txt/pdf文件。我也想自動化這一步。

任何想法?

+0

看看[請求](http://pypi.python.org/pypi/requests/1.1.0)和[mechanize](http://wwwsearch.sourceforge.net/mechanize/) – inspectorG4dget

+0

同時,怎麼做你「找到我想要的文件」?除非你有一個很好的「猜測TWhite想要什麼」AI庫,否則你需要能夠在算法上對它進行自動化描述。 – abarnert

+0

如果您顯示使用scribd API提取文檔ID的代碼,將其更改爲提取下載URL的代碼應該是微不足道的。但是我不清楚你會如何在不知道你的問題的答案的情況下在第一時間編寫代碼(除非你不知道如何查找文檔,或者從Python調用'help'),所以...也許你做的和聽起來不一樣?在這種情況下,你肯定需要向我們展示代碼。 – abarnert

回答

3

查看python-scribd documentationscribd API reference,任何可以爲您提供文檔ID或網站URL的對象也可以爲您提供下載URL。或者,如果您已有文檔ID,則只需致電get即可獲取可提供下載URL的對象。

最有可能的,你已經有了一個Document對象,它具有以下方法:

get_download_url(個體經營,DOC_TYPE = '原始')

返回可以用來下載鏈接文檔的靜態版本。

所以,無論你打電話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可以訪問它們(所以在is_document_i_want函數的頂部添加document.load())。但是,真的,這裏沒有什麼複雜的。

+0

這是我失蹤的鏈接謝謝。我無法找到Document obj的下載網址。 – TWhite