2017-12-13 12 views
0

나는 웹 페이지에서 파일을 다운로드하기 위해 python으로 코드를 작성했습니다. 다른 사이트에서 파일을 다운로드하는 방법을 모르므로 해당 사이트의 파일 링크 만 다칠 수 있습니다. 누군가 내가 그 일을 성취하도록 도울 수 있다면 나는 그에게 매우 감사 할 것입니다. 많은 감사드립니다. 해당 사이트에특정 웹 사이트에서 파일을 다운로드 할 수 없습니다.

링크 : 실행시

from bs4 import BeautifulSoup 
import requests 

response = requests.get("http://usda.mannlib.cornell.edu/MannUsda/viewDocumentInfo.do?documentID=1194") 
soup = BeautifulSoup(response.text,"lxml") 
for item in soup.select("#latest a"): 
    print(item['href']) 

은, 위의 스크립트는 해당 파일에 네 개의 서로 다른 URL을 생성합니다 여기 web_link

내 시도이다.

답변

1

당신은 표준 라이브러리의 urllib.request.urlretrieve()로 갈 수 있지만, 이미 requests을 사용하고 있기 때문에, 당신은 (download_file 크게 this answer에서 찍은) 여기 세션을 다시 사용할 수 있습니다

from bs4 import BeautifulSoup 
import requests 


def download_file(session, url): 
    local_filename = url.split('/')[-1] 

    r = session.get(url, stream=True) 
    with open(local_filename, 'wb') as f: 
     for chunk in r.iter_content(chunk_size=1024): 
      if chunk: # filter out keep-alive new chunks 
       f.write(chunk) 

    return local_filename 


with requests.Session() as session: 
    response = session.get("http://usda.mannlib.cornell.edu/MannUsda/viewDocumentInfo.do?documentID=1194") 
    soup = BeautifulSoup(response.text,"lxml") 
    for item in soup.select("#latest a"): 
     local_filename = download_file(session, item['href']) 
     print(f"Downloaded {local_filename}") 
+0

행운의 선생님. 그것은 오래되었습니다. 그러나,'print' 라인을 쳤을 때 제가 직면하고있는 약간의 문제가 있습니다. 그것은 거기에서 부서진다. – SIM

+0

@Topto 파이썬 3.6을 사용하여 예를 들어'f'라는 접두사가 붙은 문자열을 사용해야한다. 그러나 오래된'print ("Downloaded", local_filename)'을 사용할 수있다. – furas

2

당신은 request.get을 사용할 수 있습니다 :

import requests 
from bs4 import BeautifulSoup 

response = requests.get("http://usda.mannlib.cornell.edu/MannUsda/" 
         "viewDocumentInfo.do?documentID=1194") 
soup = BeautifulSoup(response.text, "lxml") 
for item in soup.select("#latest a"): 
    filename = item['href'].split('/')[-1] 
    with open(filename, 'wb') as f: 
     f.write(requests.get(item['href']).content)