如何解析图像目录中的每个html文件?

时间:2012-03-07 20:39:01

标签: python image jpeg beautifulsoup

我有一个充满html文件的目录,每个文件都有一个牛皮癣患者的临床图像。我想打开每个文件,找到图像,并将其保存在同一目录中。

import os, os.path
import Image
from BeautifulSoup import BeautifulSoup as bs

path = 'C:\Users\gokalraina\Desktop\derm images'

for root, dirs, files in path:
    for f in files:
        soup = bs(f)
        for image in soup.findAll("img"):
            print "Image: %(src)s" % image
            im = Image.open(image)
            im.save(path+image["src"], "JPEG")

我收到此错误:

 Traceback (most recent call last):
   File "C:\Users\gokalraina\Desktop\modfile.py", line 7, in <module>
     for root, dirs, files in path:
 ValueError: need more than 1 value to unpack

即使在谷歌搜索错误后,我也不知道出了什么问题,或者我是否正确地做了这件事。请记住,我是python的新手。

编辑:在对程序进行建议的更改后,我仍然收到错误:

  Traceback (most recent call last):
  File "C:\Users\gokalraina\Desktop\modfile.py", line 25, in <module>
    im = Image.open(image)
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 1956, in open
    prefix = fp.read(16)
 TypeError: 'NoneType' object is not callable

这是修改后的代码(感谢nightcracker)

 import os, os.path
 import Image
 from BeautifulSoup import BeautifulSoup as bs

 path = 'C:\Users\gokalraina\Desktop\derm images'

 for root, dirs, files in os.walk(path):
    for f in files:
       soup = bs(open(os.path.join(root, f)).read())
       for image in soup.findAll("img"):
          print "Image: %(src)s" % image
          im = Image.open(image)
          im.save(path+image["src"], "JPEG")

3 个答案:

答案 0 :(得分:1)

您需要更改此行:

for root, dirs, files in path:

for root, dirs, files in os.walk(path):

另请注意,files是文件名称,而非对象,因此这将是您的固定代码:

import os, os.path
import Image
from BeautifulSoup import BeautifulSoup as bs

path = 'C:\Users\gokalraina\Desktop\derm images'

for root, dirs, files in os.walk(path):
    for f in files:
        soup = bs(open(os.path.join(root, f)).read())
        for image in soup.findAll("img"):
            print "Image: %(src)s" % image
            im = Image.open(image)
            im.save(path+image["src"], "JPEG")

答案 1 :(得分:1)

你需要使用os.walk(path):提供一些有意义的内容列表,只要提供一个String就可以了,它需要一个列表。

行走文件系统的惯用方法是使用os.walk()

for root, dirs, files in os.walk(path):

答案 2 :(得分:1)

for root, dirs, files in path:

path这是一个字符串。每个元素只是一个字符,您不能将单个字符解包为三个变量。因此错误消息:您需要多个值来解压缩。

你可能想要:

for root, dirs, files in os.walk(path):