2016-11-20 7 views
0

与えられたページソースにイメージとワードドキュメントがいくつかありますが、私が書いた正規表現にそれらをマッチさせてインストールしようとしています"\w+\.\w{1,4}" は正規表現に適していますか?Pythonファイルと画像をダウンロードする

コードのこの作品は、ここで

retrieve = urllib.urlretrieve(i,'C:\Python27')です私のコードです:

import sys, urllib, re 

def retriev_files(page): 
    open_page = urllib.urlopen(page) 
    contents = open_page.read() 
    find_files = re.findall("\w+\.\w{1,4}",contents) 
    for i in find_files: 
     try: 
      print " retrieving %s ... " %i 
      retrieve = urllib.urlretrieve(i,'C:\Python27') 
      print " done !! " 
      return retrieve 

     except urllib.urlretrieve as err: 
      pass 

def main(): 
    print retriev_files("http://www.soc.napier.ac.uk/~40001507/CSN08115/cw_webpage/index.html") 
if __name__ == "__main__": 
    main() 

答えて

0

あなたのコード

  • にはいくつかの問題があり、あなたの正規表現は、いくつかの文字で何かをキャプチャしますそれに続いて1つ以上の文字が続きます。これはicon_clown.gifでもr.macfでもかまいません。これは電子メールアドレスの一部です。有名なanswerを見て、なぜRegExがHTMLを解析する良い方法ではないのか考えてみてください。ウェブページからデータを取得するには、beautifulsoupやSeleniumのようなものを試してみてください。

  • return retrieveは、最初のイメージを取得してから終了します。あなたはretrieved_images.append(retrieve[0])を使用し、最終的に最初の要素は、ファイル名(上記の行で[0]の理由)であるタプルを返しurlretrieveリスト

  • を返し、その後、リストretrieved_imagesを定義することができます。 2番目の引数は、パス名ではなくファイル名でなければなりません。
  • 正規表現にはいくつかのファイル名があります。 icon_clown.gifの場合は機能しますが、完全なパスは得られません。つまり、pageのURLとRegEx一致をマージする必要があります。

ほとんどの場合、次の行が有効です。相対イメージURLのみが与えられたとき

urllib.urlretrieve(path[0:path.rfind('/')] + '/' file) 
関連する問題