Python下载文件和图像

时间:2016-11-20 01:29:17

标签: python image download

给定页面源中有几个图像和一个word文档,我试图通过将它们与我编写的正则表达式"\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()

1 个答案:

答案 0 :(得分:0)

您的代码有几个问题

  • 你的正则表达式会捕获任何一些字符后跟一个或多个字符,可能是icon_clown.gif,也可能是r.macf,它是电子邮件地址的一部分。在这里看看这个着名的answer,以了解为什么RegEx不是解析HTML的好方法。尝试使用beautifulsoup或者Selenium之类的东西来从网页上获取数据。

  • return retrieve只会检索第一张图片然后退出您的功能。您可以定义列表retrieved_images,然后使用retrieved_images.append(retrieve[0])并最终返回列表

  • urlretrieve返回一个元组,其中第一个元素是文件名(上面一行中[0]的原因)。第二个参数需要是文件名而不是路径。
  • 你的正则表达式会找到一些文件名,例如它适用于icon_clown.gif,但它并没有为您提供完整路径,即您需要将page中的网址与您的RegEx匹配合并,例如

以下行可能适用于大多数情况,例如:当只给出相对图像URL时。

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