簡體   English   中英

Python下載文件和圖像

[英]Python Downloading files and images

在給定的頁面源代碼中有幾張圖片和一個word文檔,我試圖通過將它們與我寫的"\\w+\\.\\w{1,4}"匹配的正則表達式進行匹配來安裝所有這些圖像"\\w+\\.\\w{1,4}"不?

這段代碼是否正確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()

您的代碼有幾個問題

  • 您的正則表達式將捕獲所有內容,其中包括一些字符,然后是一個或多個字符,可能是icon_clown.gif,也可能是電子郵件地址一部分的r.macf。 在這里看看這個著名的答案 ,以了解為什么RegEx不是解析HTML的好方法。 嘗試使用諸如beautifulsoup或最好是Selenium之類的方法從網頁獲取數據。

  • return retrieve將只檢索第一個圖像,然后退出函數。 您可以定義一個列表retrieved_images ,然后使用retrieved_images.append(retrieve[0])並最終返回列表

  • urlretrieve返回一個元組,其中第一個元素是文件名(上一行中[0]的原因)。 第二個參數必須是文件名而不是路徑。
  • 您的正則表達式會找到一些文件名,例如,它適用於icon_clown.gif ,但它不能為您提供完整路徑,即您需要將page的URL與RegEx匹配項進行合並,例如

在大多數情況下,例如僅給出相對圖像URL時,以下行可能有效。

urllib.urlretrieve(path[0:path.rfind('/')] + '/' file)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM