2017-12-13 30 views
0

私は、WebページからファイルをダウンロードするためのPythonでいくつかのコードを書いています。どんなサイトからでもファイルをダウンロードする方法がわからないので、そのサイトからのファイルリンクだけを掻き取ることができます。誰かが私がそれを達成するのを手助けできるなら、私は彼にとても感謝しています。ありがとうございます。そのサイトへ特定のWebサイトからファイルをダウンロードできません

リンク:実行されると

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']) 

は、上記のスクリプトは、それらのファイル4つの異なるURLを生成します。ここではweb_link

は私の試みです。

答えて

1

あなたはすでに(download_fileが大きくthis answerから取られた)ここで、あなたは再使用できるセッションrequestsを使用しているので、標準ライブラリのurllib.request.urlretrieve()で行くことができますが、:あなたが使用することができます

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例のように接頭辞 'f'の文字列を使用するにはPython 3.6を使用する必要がありますが、古い' 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) 
関連する問題