2015-04-15 12 views
5

pracuję nad podjęciem PDF Web skrobak w Pythonie. Zasadniczo próbuję zeskrobać wszystkie notatki z wykładów z jednego z moich kursów, które są w formie plików PDF. Chcę wprowadzić adres URL, a następnie pobrać pliki PDF i zapisać je w katalogu na moim laptopie. Przyjrzałem się kilku tutorialom, ale nie jestem do końca pewien, jak to zrobić. Żadne z pytań dotyczących StackOverflow nie pomaga mi.Jak pobierać pliki PDF ze zeskrobanych łączy [Python]?

Oto co mam do tej pory:

import requests 
from bs4 import BeautifulSoup 
import shutil 

bs = BeautifulSoup 

url = input("Enter the URL you want to scrape from: ") 
print("") 

suffix = ".pdf" 

link_list = [] 

def getPDFs():  
    # Gets URL from user to scrape 
    response = requests.get(url, stream=True) 
    soup = bs(response.text) 

    #for link in soup.find_all('a'): # Finds all links 
    # if suffix in str(link): # If the link ends in .pdf 
     #  link_list.append(link.get('href')) 
    #print(link_list) 

    with open('CS112.Lecture.09.pdf', 'wb') as out_file: 
     shutil.copyfileobj(response.raw, out_file) 
    del response 
    print("PDF Saved") 

getPDFs() 

Początkowo miałem zdobyć wszystkie linki do plików PDF, ale nie wiem, jak je pobrać; kod tego jest teraz skomentowany.

Teraz stałam się do punktu, w którym próbuję pobrać tylko jeden plik PDF; i pobierany jest plik PDF, ale jest to plik 0 KB.

Jeśli to jakiegokolwiek użytku, używam Python 3.4.2

Odpowiedz

6

Jeśli jest coś, co nie wymaga być zalogowany, można użyć urlretrieve():

from urllib.request import urlretrieve 

for link in link_list: 
    urlretrieve(link) 
+1

Dzięki za to. Nawet jeśli nie pomaga OP, dowiedziałem się o nowej funkcji Pythona. :) –

+0

Awesome. Działa to doskonale! Jedno pytanie uzupełniające; jak wybrać katalog do zapisania plików? – freddiev4

+1

@ FreddieV4 można podać pełną ścieżkę dostępu do pliku w drugim argumencie, patrz przykłady na http://stackoverflow.com/questions/6373094/how-to-download-a-file-to-a-specific-path- w-serwerze-python. Dzięki. – alecxe

Powiązane problemy