如何从目录中的html文件中提取图像?

时间:2012-03-07 23:25:14

标签: python html image beautifulsoup

这是此问题的后续内容:How do I parse every html file in a directory for images? 基本上,我有一个html文件目录,每个文件都包含我想在同一目录中单独保存的图像。

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

Image: theme/pfeil_grau.gif

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")

2 个答案:

答案 0 :(得分:1)

代码将BeautifulSoup.Tag对象传递给Image.open,但Image.open期待路径或文件对象。您可以使用image["src"]获取图像的相对路径,因此代码为:

im = Image.open(image["src"])

但是,该路径与HTML文件中写入的路径相同,这可能是从HTML文件目录开始的相对路径。如果是这样,将root加入image["src"]将获得每张图片的绝对路径:

im = Image.open(os.path.join(root, image["src"]))

答案 1 :(得分:0)

Image.open()可能无法处理远程文件。您最好使用urlliburllib2模块下载图片。