2017-08-19 6 views
0

GoogleドライブでホストされているすべてのPDFスライドをダウンロードしようとしています。収集されたURLは、PDFにリダイレクトされるGoogleドライブを示します。リクエストを使用してPDFをダウンロードしようとすると、バイナリデータではなくHTML(122 KB)のみをダウンロードします。Googleドライブから完全なPDFをダウンロードしないよう依頼する

import os, sys, time, random 
import requests 
from selenium import webdriver 
from bs4 import BeautifulSoup 

url = 'https://mila.umontreal.ca/en/cours/deep-learning-summer-school-2017/slides' 

def download(url, name): 
    response = requests.get(url) 
    pdf = response.content 
    with open(name, 'wb') as f: 
     f.write(pdf) 

browser = webdriver.Chrome() 
browser.get(url) 
browser.switch_to_frame(browser.find_element_by_class_name('iframe-class')) 
links = browser.find_elements_by_css_selector('.flip-entry a') 
titles = browser.find_elements_by_css_selector('.flip-entry-title') 
pdfs = [link.get_attribute('href') for link in links] 
names = [title.text for title in titles] 
browser.quit() 

for i, pdf in enumerate(pdfs): download(pdf, names[i]) 

答えて

1

問題は、抽出しているリンクが表示リンクとダウンロードリンクであることです。そのリンクをダウンロードすると、ブラウザのJavaScriptを使用してファイルをロードするGoogleのドライバのHTMLが取得されます。そして、それはあなたがダウンロードリンクに

for i, pdf in enumerate(pdfs): 
    # get the doc id 
    doc_id = pdf.split("/")[-2] 
    download_url = "https://drive.google.com/uc?id={}&export=download".format(doc_id) 
    download(download_url, names[i]) 
+0

感謝をあなたのビュー・リンクを変更するためにコードを追加する必要がありますが、ファイル

をダウンロードするためのダウンロードボタンを示しています。わずかに微調整(httpsではなくhttpを使用)で動作します。 – Char

関連する問題